上一篇我写了Array数组对象的一些基本方法,这次总结些关于ES5、ES6新增的数组对象的方法。
一、ES5新增数组方法(IE9+支持)
1.1索引方法
indexOf():返回要查找数值在数组中的索引值,从前往后查找,找不到返回-1
lastIndexOf():从后面往前找,但索引值不变。
语法格式: indexOf / lastIndexOf(要查找的项,查找起点索引)。
var a = [2, 9, 5,44,88,9,32];
console.log(a.indexOf(2)); // 0
console.log(a.indexOf(7)); // -1
console.log(a.lastIndexOf(2));//0
console.log(a.lastIndexOf(7));//-1
console.log(a.lastIndexOf(9,3));//1
console.log(a.lastIndexOf(9,5));//5
1.2数组迭代方法
ECMAScript 5 为数组定义了 5 个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响 this 的值。
传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置、数组对象本身。
1.2.1 forEach(fn):用于替代for循环,比for循环简便,但不能随意退出,不能使用break。此方法没有返回值。
const items = ['item1', 'item2', 'item3'];
const copy = [];
items.forEach(function(item){
copy.push(item)
});
console.log(copy);//["item1", "item2", "item3"]
1.2.3 map(fn):返回的是一个数量相等的新数组,返回的内容是什么取决于在fn中返回的值。
var numbers = [1, 5, 10, 15];
var doubles = numbers.map(function(x) {
return x * 2;
});
console.log(doubles);// [2, 10, 20, 30]
1.2.3 filter(fn): 得到执行fn后返回时true对应的数组元素组成的数组,利用这个方法对数组元素进行筛选。
var words = ["spray", "limit", "elite", "exuberant", "destruction", "present", "happy"];
var longWords = words.filter(function(word){
return word.length > 6;
});
console.log(longWords);//["exuberant", "destruction", "present"]
1.2.4 some(fn):如果该函数对任何一项返回ture,则返回ture。-->用于判断数组是否存在某个属性值/对象等(indexOf有局限性)
var aa=[2,5,8,4];
var bb=[11,3,6,8];
var cc=aa.some(function(item){
return item >10;
});
var dd=bb.some(function(item){
return item >10;
})
console.log(cc);//false
console.log(dd);//true
1.2.5 every(fn):执行函数时,所有元素都返回ture,则返回ture。
var aa=[2,5,8,4];
var bb=[11,3,6,8];
var cc=aa.every(function(item){
return item <10;
});
var dd=bb.every(function(item){
return item <10;
})
console.log(cc);//true
console.log(dd);//false
二、ES6新增新操作数组的方法
2.1 find();传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它,并且终止搜索。
findIndex();传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它的下标,终止搜索。
const arr = [1, "2", 3, 3, "2"]
console.log(arr.find(n => typeof n === "number")) // 1
const arr1 = [1, "2", 3, 3, "2"]
console.log(arr1.findIndex(n => typeof n === "number")) // 0
2.2 fill();
用新元素替换掉数组内的元素,可以指定替换下标范围。
格式:arr.fill(value, start, end)
const arr2=[1,2,3,4];
console.log(arr2.fill(5));//[5, 5, 5, 5],默认所有元素替换
const arr3=[1,2,3,4];
console.log(arr3.fill(6,1,5));//[1, 6, 6, 6],新元素6替换在索引值为1到5之间的所有元素
2.3 copyWithin()
选择数组的某个下标,从该位置开始复制数组元素,默认从0开始复制。也可以指定要复制的元素范围。
格式:arr.copyWithin(被替换的起始位置,选取替换值的起始位置,选取替换值的结束位置)
let arr4 = [1, 'c', 'd', 'a', 'b'];
console.log(arr4.copyWithin(0, 3, 5)) // ["a", "b", "d", "a", "b"]
2.4 Array.from()
将类似数组的对象(array-like object)和可遍历(iterable)的对象转为真正的数组
const bar = ["a", "b", "c"];
console.log(Array.from(bar));// ["a", "b", "c"]
2. 5 Array.of();用于将一组值,转换为数组
Array(3, 11, 8) // [3, 11, 8]
Array.of(7); // [7]
Array.of(1, 2, 3); // [1, 2, 3]
2.6 entries() 返回迭代器:返回键值对
//数组
const arr = ['a', 'b', 'c'];
for(let v of arr.entries()) {
console.log(v)
}
// [0, 'a'] [1, 'b'] [2, 'c']
//Set
const arr = new Set(['a', 'b', 'c']);
for(let v of arr.entries()) {
console.log(v)
}
// ['a', 'a'] ['b', 'b'] ['c', 'c']
//Map
const arr = new Map();
arr.set('a', 'a');
arr.set('b', 'b');
for(let v of arr.entries()) {
console.log(v)
}
// ['a', 'a'] ['b', 'b'
2.7values() 返回迭代器:返回键值对的value;
keys() 返回迭代器:返回键值对的key
const arr = ['a', 'b', 'c'];
for(let v of arr.values()) {
console.log(v)
}
//'a' 'b' 'c'
const arr = ['a', 'b', 'c'];
for(let v of arr.keys()) {
console.log(v)
}
// 0 1 2
2.8 includes()
判断数组中是否存在该元素,参数:查找的值、起始位置,可以替换 ES5 时代的 indexOf 判断方式。indexOf 判断元素是否为 NaN,会判断错误。
var a = [1, 2, 3];
console.log(a.includes(2)); // true
console.log(a.includes(4)); // false
来源:oschina
链接:https://my.oschina.net/u/4350756/blog/3407486