Array.from()
Array.from()方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)对象。
let ps=document.querySelectorAll('p');
Array.from(ps).forEach(function(p){
console.log(p);
})
上面的代码中,querySelectorAll方法返回的是一个类似数组的对象,只有将这个对象转为真正的数组,才能使用forEach方法。
任何有length属性的对象,都可以通过Array.from方法转换为数组.
Array.from({0:"a",1:"b",2:"c"},length:3);
// ["a","b","c"]
对于没有部署该方法的浏览器,可以用Array.prototyp.slice方法替代。
const toArray = (() =>
Array.from ? Array.from : obj => [].slice.call(obj)
)();
Array.from()还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理。
Array.from(arrayLike, x => x*x);
//等同于
Array.from(arrayLike).map(x=>x*x);
下面的例子将数组中布尔值为false的成员转为0.
Array.from([1,2,3],(n)=>n||0)
//[1,0,2,0,3]
Array.of()
将一组值转换为数组
Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1
数组实例的find()和findIndex()
数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。
var found = [1,4,-5,10].find((n)->n<0);
console.log("found:",found);
上面的代码找出数组中第一个小于0的成员。
[1,5,10,15].find(function(value,index,arr){
return value>9;
});
数组实例的findIndex方法的用法与find方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。
[1, 5, 10, 15].findIndex(function(value, index, arr) {
return value > 9;
}) // 2
数组实例的fill()
fill()使用给定值,填充一个数组。
['a','b','c'].fill(7);//[7,7,7]
new Array(3).fill(7)//[7,7,7]
fill()方法用于空数组的初始化很方便,数组中已经有的元素会被全部抹去。
fill()可以接受第二个和第三个参数用于指定填充的起始位置和结束位置 。
['a','b','c'].fill(7,1,2)
//['a',7,'c']
数组实例的entries(),keys()和values()
ES6提供三个新的方法–entries(),keys()和values()– 用于遍历数组。
- entries()对键值对进行遍历
- keys() 对键名进行遍历
- values() 对键值的遍历
for(let index of ['a','b'].keys()){
console.log(index)
}
for(let element of ['a','b'].values()){
console.log(elem);
}//nodejs V6.5.0支持
for(let [index,element] of ['a','b'].entries()){
console.log(index,elem);
}
数组实例的includes()
Array.protypeto.includes方法返回一个布尔值,表示某个数组是否包含给定的值。
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, NaN].includes(NaN); // true
该方法的第二个参数表示搜索的起始位置
[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true
下面代码用来检查当前环境是否支持该方法,如果不支持,部署一个简易的替代版本。
const contains = (() =>
Array.prototype.includes
? (arr, value) => arr.includes(value)
: (arr, value) => arr.some(el => el === value)
)();
contains(["foo", "bar"], "baz"); // => false