ES6 Array新增API

    技术2025-02-01  12

    ES6 Array新增API

    静态方法Array.of(arg)Array.from(arg) 实例方法find(callback)findIndex(callback)fill(data)copyWithin(target,[start],[end])includes(data)

    静态方法

    Array.of(arg)

    创建一个具有可变数量参数的新数组 ,用于将一组值,转换为数组 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]

    Array.from(arg)

    将类似数组的对象和可迭代(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

    实例方法

    find(callback)

    查找满足条件的第一个元素 const arr= [1,3,5,7,9] arr.find(n => n >5) //7

    findIndex(callback)

    查找满足条件的第一个元素下标 const arr= [1,3,5,7,9] arr.findIndex(n => n >5) //3

    fill(data)

    用指定的数据填充数组 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]+

    copyWithin(target,[start],[end])

    在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组 会修改当前数组。 target(必需):从该位置开始替换数据。如果为负值,表示倒数。 start(可选):从该位置开始读取数据,默认为 0。如果为负值,表示从末尾开始计算。 end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示从末尾开始计算。 const arr = [1,2,3,4,5] arr.copyWithin(0,1)//[2, 3, 4, 5, 5]

    includes(data)

    返回一个布尔值,表示某个数组是否包含给定的值 [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
    Processed: 0.010, SQL: 12