创建一个具有可变数量参数的新数组 ,用于将一组值,转换为数组
const arr = Array.of(5);
console.log(arr) //[5]
const arr1 = Array.of(1,2,4,5,2,1);
console.log(arr1) //[1, 2, 4, 5, 2, 1]
这个方法的主要目的,是弥补数组构造函数Array()的不足。因为参数个数的不同,会导致Array()的行为有差异。
Array.of() // []
Array.of(undefined) // [undefined]
Array.of总是返回参数值组成的数组。如果没有参数,就返回一个空数组。
可以用下面的代码模拟实现
function ArrayOf(){
return [].slice.call(arguments);
}
const arr = ArrOf(1,2,3,4,5,6) // [1,2,3,4,5,6]
将类似数组的对象和可迭代(iterable)的对象转为真正的数组
//参数为数组,返回与原数组一样的数组
const arr = Array.from([1, 2])//[1,2]
//一个类数组对象必须含有 length 属性,且元素属性名必须是数值或者可转换为数值的字符。
let obj = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
const arr = Array.from(obj); // ['a', 'b', 'c']
// ES5的写法
const arr1 = [].slice.call(obj); // ['a', 'b', 'c']
//没有 length 属性,则返回空数组 []
//元素属性名不为数值且无法转换为数值,返回长度为 length 元素值为 undefined 的数组 [undefined]
//NodeList转为真正的数组
let div = document.getElementsByTagName("div");
const a = Array.from(div);
console.log(a);//[div,div,div]
//ES5的写法
const b = Array.prototype.slice.call(div,0)
//const b = [].prototype.slice.call(div,0)
console.log(b);//[div,div,div]
//可迭代(iterable)的对象转为数组
//Set
const set = new Set(['a', 'b'])
const a = Array.from(set)
console.log(a);// ['a', 'b']
//String 返回字符串的长度
const str = 'abc';
console.log(Array.from(str)); // ["a", "b", "c"]
//将字符串转为数组,然后返回字符串的长度
//可以避免 JavaScript 将大于\uFFFF的 Unicode 字符,算作两个字符的 bug。
const str = '';
console.log(str.length);//2
function countSymbols(string) {
return Array.from(string).length;
}
console.log(countSymbols(str));//1
查找满足条件的第一个元素
const arr= [1,3,5,7,9]
arr.find(n => n >5) //7
查找满足条件的第一个元素下标
const arr= [1,3,5,7,9]
arr.findIndex(n => n >5) //3
用指定的数据填充数组
const arr = new Array(3);
arr.fill("qwer")
console.log(arr);//["qwer", "qwer", "qwer"]
// 可以固定填充
// 第一个参数是填充内容,
// 第二个参数(可选)是起始索引,默认是0,
// 第三个参数(可选)是终止索引,默认值为 this.length
const d = [1,2,3,4,5]
d.fill(2,2)
console.log(d);//[1,2,2,2,2]+
在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组
会修改当前数组。
target(必需):从该位置开始替换数据。如果为负值,表示倒数。
start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示从末尾开始计算。
end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示从末尾开始计算。
const arr = [1,2,3,4,5]
arr.copyWithin(0,1)//[2, 3, 4, 5, 5]
返回一个布尔值,表示某个数组是否包含给定的值
[1, 2, 3].includes(2) // true
[1, 2, 3].includes(4) // false
[1, 2, NaN].includes(NaN) // true
该方法的第二个参数表示搜索的起始位置,默认为0。
如果第二个参数为负数,则表示倒数的位置,如果这时它大于数组长度(比如第二个参数为-4,但数组长度为3),则会重置为从0开始。
[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true