美文网首页
JS中数组对象有原生方法

JS中数组对象有原生方法

作者: 油菜又矮吹 | 来源:发表于2020-08-31 18:11 被阅读0次

    数组对象原生方法

    copyWithin 、fill 、pop、push、sort、reverse、shift、unshift、splice、concat、includes 、join、slice、toString、indexOf、lastIndexOf、forEach、entries 、every、some、filter、find、findIndex、keys、values、map、reduce、reduceRight

    修改器方法

    下面的这些方法会改变调用它们的对象自身的值

    copyWithin 这是一个实验性的API,请尽量不要在生产环境中使用它

    浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度

    /**
     * arr.copyWithin(target[, start[, end]])
     * @param target
     * 0 为基底的索引,复制序列到该位置。如果是负数,target 将从末尾开始计算
     * 如果 target 大于等于 arr.length,将会不发生拷贝。如果 target 在 start 之后,复制的序列将被修改以符合 arr.length
     * @param start
     * 0 为基底的索引,开始复制元素的起始位置。如果是负数,start 将从末尾开始计算
     * 如果 start 被忽略,copyWithin 将会从0开始复制
     * @param end
     * 0 为基底的索引,开始复制元素的结束位置。copyWithin 将会拷贝到该位置,但不包括 end 这个位置的元素。如果是负数, end 将从末尾开始计算
     * 如果 end 被忽略,copyWithin 方法将会一直复制至数组结尾(默认为 arr.length)
     * @returns [](改变后的数组)
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.copyWithin(0, 4, 5)) //[2, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
     console.log(arr.copyWithin(1, 4)) //[3, 2, 7, 4, 6, 8, 9, 1, 8, 9, 1]
    
    fill 这是一个实验性的API,请尽量不要在生产环境中使用它

    用一个固定值填充一个数组中从起始索引到终止索引内的全部元素,不包括终止索引

    /**
     * arr.fill(value[, start[, end]])
     * @param value
     * 用来填充数组元素的值
     * @param start
     * 起始索引,默认值为0
     * @param end
     * 终止索引,默认值为 this.length
     * @returns [](修改后的数组)
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.fill(0, 2, 4))  // [3, 5, 0, 0, 2, 7, 4, 6, 8, 9, 1]
     console.log(arr.fill(5, 1))  // [3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
     console.log(arr.fill(6))  // [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
    
    pop

    从数组中删除最后一个元素,并返回该元素的值,此方法更改数组的长度

    /**
     * arr.pop()
     * @returns 从数组中删除的元素(当数组为空时返回undefined)
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.pop())  // 1
     console.log(arr)  // [3, 5, 0, 3, 2, 7, 4, 6, 8, 9]
    
    push

    将一个或多个元素添加到数组的末尾,并返回该数组的新长度

    /**
     * arr.push(element1, ..., elementN)
     * @param elementN
     * 被添加到数组末尾的元素
     * @returns 当调用该方法时,新的 length 属性值将被返回
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.push(7))  // 12
     console.log(arr)  // [3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1, 7]
     console.log(arr.push(5, 8, 3))  // 15
     console.log(arr)  // [3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1, 7, 5, 8, 3]
    
    sort

    原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的。由于它取决于具体实现,因此无法保证排序的时间和空间复杂性

    /**
     * arr.sort([compareFunction])
     * @param compareFunction  (可选)
     * 用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序
     * firstEl  第一个用于比较的元素
     * secondEl 第二个用于比较的元素
     * @returns 排序后的数组。请注意,数组已原地排序,并且不进行复制
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.sort())  // [0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9]
    
    reverse

    将数组中元素的位置颠倒,并返回该数组,该方法会改变原数组

    /**
     * arr.reverse()
     * @returns 颠倒后的数组
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.reverse())  // [1, 9, 8, 6, 4, 7, 2, 3, 0, 5, 3]
    
    shift

    从数组中删除第一个元素,并返回该元素的值,此方法更改数组的长度

    /**
     * arr.shift()
     * @returns 从数组中删除的元素; 如果数组为空则返回undefined
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.shift())  // 3
     console.log(arr)  //  [5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
    
    unshift

    将一个或多个元素添加到数组的开头,并返回该数组的新长度,该方法修改原有数组

    /**
     * arr.unshift(element1, ..., elementN)
     * @param elementN
     * 要添加到数组开头的元素或多个元素
     * @returns 当一个对象调用该方法时,返回其 length 属性值
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.unshift(4, 5))  // 13
     console.log(arr)  // [4, 5, 3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
    
    splice

    删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容,此方法会改变原数组

    /**
     * array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
     * @param start​
     * 指定修改的开始位置(从0计数)。如果超出了数组的长度,则从数组末尾开始添加内容;
     * 如果是负值,则表示从数组末位开始的第几位(从-1计数,这意味着-n是倒数第n个元素并且等价于array.length-n);
     * 如果负数的绝对值大于数组的长度,则表示开始位置为第0位
     * deleteCount (可选)
     * 整数,表示要移除的数组元素的个数
     * 如果 deleteCount 大于 start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)
     * 如果 deleteCount 被省略了,或者它的值大于等于array.length - start(也就是说,如果它大于或者等于start之后的所有元素的数量),那么start之后数组的所有元素都会被删除
     * 如果 deleteCount 是 0 或者负数,则不移除元素。这种情况下,至少应添加一个新元素
     * item1, item2, ... (可选)
     * 要添加进数组的元素,从start 位置开始。如果不指定,则 splice() 将只删除数组元素
     * @returns 由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.splice(1, 0, 8))  // []
     console.log(arr)  // [3, 8, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
     console.log(arr.splice(4, 2, 7, 2))  // [3, 2]
     console.log(arr)  // [3, 8, 5, 0, 7, 2, 7, 4, 6, 8, 9, 1]
    
    访问方法

    下面的这些方法绝对不会改变调用它们的对象的值,只会返回一个新的数组或者返回一个其它的期望值

    concat

    用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组

    /**
     * var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
     * @param valueN (可选)
     * 数组和/或值,将被合并到一个新的数组中。如果省略了所有 valueN 参数,则 concat 会返回调用此方法的现存数组的一个浅拷贝
     * @returns 新的 Array 实例
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     const tempArr = [7, 3, 8, 5]
     const tempNewArr = arr.concat(tempArr)
     const newArray = arr.concat([7, 3, 8, 5])
     console.log(tempNewArr)  // [3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1, 7, 3, 8, 5]
     console.log(newArray)  // [3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1, 7, 3, 8, 5]
    
    includes 这是一个实验性的API,请尽量不要在生产环境中使用它

    判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false

    /**
     * arr.includes(valueToFind[, fromIndex])
     * @param valueToFind
     * 需要查找的元素值
     * @param fromIndex (可选)
     * 从fromIndex 索引处开始查找 valueToFind。
     * 如果为负值,则按升序从 array.length + fromIndex 的索引开始搜
     * (即使从末尾开始往前跳 fromIndex 的绝对值个索引,然后往后搜寻),默认为 0
     * @returns 返回一个布尔值 Boolean ,如果在数组中找到了(如果传入了 fromIndex ,表示在 fromIndex 指定的索引范围中找到了)则返回 true
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.includes(2))  // true
     console.log(arr.includes(11))  // false
    
    join

    将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符

    /**
     * arr.join([separator])
     * @param separator  (可选)
     * 指定一个字符串来分隔数组的每个元素。
     * 如果需要,将分隔符转换为字符串。
     * 如果缺省该值,数组元素用逗号(,)分隔。
     * 如果separator是空字符串(""),则所有元素之间都没有任何字符
     * @returns 返回一个布尔值 Boolean ,如果在数组中找到了(如果传入了 fromIndex ,表示在 fromIndex 指定的索引范围中找到了)则返回 true
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.join())  // 3,5,0,3,2,7,4,6,8,9,1
     console.log(arr.join(''))  // 35032746891
     console.log(arr.join('-'))  // 3-5-0-3-2-7-4-6-8-9-1
    
    slice

    返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end),原始数组不会被改变

    /**
     * arr.slice([begin[, end]])
     * @param begin (可选)
     * 提取起始处的索引(从 0 开始),从该索引开始提取原数组元素。
     * 如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取,slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。
     * 如果省略 begin,则 slice 从索引 0 开始。
     * 如果 begin 大于原数组的长度,则会返回空数组
     * @param end (可选)
     * 提取终止处的索引(从 0 开始),在该索引处结束提取原数组元素。slice 会提取原数组中索引从 begin 到 end 的所有元素(包含 begin,但不包含 end
     * slice(1,4) 会提取原数组中从第二个元素开始一直到第四个元素的所有元素 (索引为 1, 2, 3的元素)
     * 如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。
     * slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)
     * 如果 end 被省略,则 slice 会一直提取到原数组末尾
     * 如果 end 大于数组的长度,slice 也会一直提取到原数组末尾
     * @returns 一个含有被提取元素的新数组
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.slice(2))  // [0, 3, 2, 7, 4, 6, 8, 9, 1]
     console.log(arr.slice(2, 4))  // [0, 3]
     console.log(arr.slice(1, 15))  // [5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
    
    toString

    返回一个字符串,表示指定的数组及其元素

    /**
     * arr.toString()
     * @returns 一个表示指定的数组及其元素的字符串
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.toString())  // 3,5,0,3,2,7,4,6,8,9,1
    
    indexOf

    返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1

    /**
     * arr.indexOf(searchElement[, fromIndex])
     * @param searchElement
     * 要查找的元素
     * @param fromIndex  (可选)
     * 开始查找的位置。
     * 如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回-1。
     * 如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即-1表示从最后一个元素开始查找,-2表示从倒数第二个元素开始查找 ,以此类推。
     * 注意:
     * 如果参数中提供的索引值是一个负值,并不改变其查找顺序,查找顺序仍然是从前向后查询数组。
     * 如果抵消后的索引值仍小于0,则整个数组都将会被查询。其默认值为0
     * @returns 首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.indexOf(2))  // 4
     console.log(arr.indexOf(10))  // -1
    
    lastIndexOf

    返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex 处开始

    /**
     * arr.lastIndexOf(searchElement[, fromIndex])
     * @param searchElement
     * 要查找的元素
     * @param fromIndex  (可选)
     * 从此位置开始逆向查找。默认为数组的长度减 1(arr.length - 1),即整个数组都被查找。
     * 如果该值大于或等于数组的长度,则整个数组会被查找。
     * 如果为负值,将其视为从数组末尾向前的偏移。
     * 即使该值为负,数组仍然会被从后向前查找。
     * 如果该值为负时,其绝对值大于数组长度,则方法返回 -1,即数组不会被查找
     * @returns 数组中该元素最后一次出现的索引,如未找到返回-1
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.lastIndexOf(3))  // 3
     console.log(arr.lastIndexOf(10))  // -1
    
    迭代方法

    在下面的众多遍历方法中,有很多方法都需要指定一个回调函数作为参数。在每一个数组元素都分别执行完回调函数之前,数组的length属性会被缓存在某个地方,所以,如果你在回调函数中为当前数组添加了新的元素,那么那些新添加的元素是不会被遍历到的。此外,如果在回调函数中对当前数组进行了其它修改,比如改变某个元素的值或者删掉某个元素,那么随后的遍历操作可能会受到未预期的影响。总之,不要尝试在遍历过程中对原数组进行任何修改,虽然规范对这样的操作进行了详细的定义,但为了可读性和可维护性,请不要这样做

    forEach

    方法对数组的每个元素执行一次给定的函数

    /**
     * arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
     * @param callback
     * 为数组中每个元素执行的函数,该函数接收一至三个参数:
     * currentValue 数组中正在处理的当前元素
     * index(可选)  数组中正在处理的当前元素的索引
     * array(可选)   forEach() 方法正在操作的数组
     * @param thisArg(可选)
     * 可选参数。当执行回调函数 callback 时,用作 this 的值
     * @returns undefined
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     arr.forEach(element => console.log(element))
     // 3
     // 5
     // 0
     // 3
     // 2
     // 7
     // 4
     // 6
     // 8
     // 9
     // 1
    
    entries 这是一个实验性的API,请尽量不要在生产环境中使用它

    返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对

    /**
     * arr.entries()
     * @returns
     * 一个新的 Array 迭代器对象。Array Iterator是对象,
     * 它的原型(__proto__:Array Iterator)上有一个next方法,可用用于遍历迭代器取得原数组的[key,value]
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     const iterator1 = arr.entries();
     console.log(iterator1.next().value)  // [0, 3]
     console.log(iterator1.next().value)  // [1, 5]
     console.log(iterator1.next().value)  // [2, 0]
    
    every

    测试一个数组内的所有元素是否都能通过某个指定函数的测试,它返回一个布尔值

    /**
     * arr.every(callback(element[, index[, array]])[, thisArg])
     * @param callback
     * 用来测试每个元素的函数,它可以接收三个参数:
     * element 用于测试的当前值
     * index(可选)  用于测试的当前值的索引
     * array(可选)  调用 every 的当前数组
     * @param thisArg(可选)
     * 执行 callback 时使用的 this 值
     * @returns 如果回调函数的每一次返回都为 truthy 值,返回 true ,否则返回 false
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.every(value => value < 10))  // true
     console.log(arr.every(value => value / 2 === 0))  // false
    
    some

    测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值

    /**
     * arr.some(callback(element[, index[, array]])[, thisArg])
     * @param callback
     * 用来测试每个元素的函数,接受三个参数:
     * element 数组中正在处理的元素
     * index (可选)  数组中正在处理的元素的索引值
     * array (可选)  some()被调用的数组
     * @param thisArg(可选)
     * 执行 callback 时使用的 this 值
     * @returns 数组中有至少一个元素通过回调函数的测试就会返回true;所有元素都没有通过回调函数的测试返回值才会为false
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     console.log(arr.some(value => value > 8))  // true
     console.log(arr.some(value => value / 2 === 0))  // true
     console.log(arr.some(value => value <-1))  // false
    
    filter

    创建一个新数组, 其包含通过所提供函数实现的测试的所有元素

    /**
     * var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
     * @param callback
     * 用来测试数组的每个元素的函数。返回 true 表示该元素通过测试,保留该元素,false 则不保留,它接受以下三个参数:
     * element 数组中当前正在处理的元素
     * index (可选)  正在处理的元素在数组中的索引
     * array (可选)  调用了 filter 的数组本身
     * @param thisArg(可选)
     * 执行 callback 时,用于 this 的值
     * @returns 一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     const result = arr.filter(value => value % 2 === 0)
     console.log(result)  // [0, 2, 4, 6, 8]
    
    find这是一个实验性的API,请尽量不要在生产环境中使用它

    返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined

    /**
     * arr.find(callback[, thisArg])
     * @param callback
     * 在数组每一项上执行的函数,接收 3 个参数:
     * element 当前遍历到的元素
     * index (可选)  当前遍历到的索引
     * array (可选)  数组本身
     * @param thisArg(可选)
     * 执行回调时用作this 的对象
     * @returns 数组中第一个满足所提供测试函数的元素的值,否则返回 undefined
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     const result = arr.find(value => value > 5)
     console.log(result)  // 7
    
    findIndex这是一个实验性的API,请尽量不要在生产环境中使用它

    返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1

    /**
     * arr.findIndex(callback[, thisArg])
     * @param callback
     * 针对数组中的每个元素, 都会执行该回调函数, 执行时会自动传入下面三个参数:
     * element 当前元素
     * index (可选)  当前元素的索引
     * array (可选)  调用findIndex的数组
     * @param thisArg(可选)
     * 执行callback时作为this对象的值.
     * @returns  数组中通过提供测试函数的第一个元素的索引。否则,返回-1
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     const result = arr.findIndex(value => value > 5)
     console.log(result)  // 5
    
    keys 这是一个实验性的API,请尽量不要在生产环境中使用它

    返回一个包含数组中每个索引键的Array Iterator对象

    /**
     * arr.keys()
     * @returns  一个新的 Array 迭代器对象
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     const iterator = arr.keys();
     for (const key of iterator) {
        console.log(key);
     }
    // 3
    // 5
    // 0
    // 3
    // 2
    // 7
    // 4
    // 6
    // 8
    // 9
    // 1
    
    values 这是一个实验性的API,请尽量不要在生产环境中使用它

    返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值

    /**
     * arr.values()
     * @returns  一个新的 Array 迭代对象
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     const iterator = arr.values();
     for (const values of iterator) {
        console.log(values);
     }
    // 0
    // 1
    // 2
    // 3
    // 4
    // 5
    // 6
    // 7
    // 8
    // 9
    // 10
    
    map

    创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值

    /**
     *  var new_array = arr.map(function callback(currentValue[, index[, array]]) {
            // Return element for new_array
        }[, thisArg])
     * @param callback
     * 生成新数组元素的函数,使用三个参数:
     * currentValue callback 数组中正在处理的当前元素
     * index (可选)  callback 数组中正在处理的当前元素的索引
     * array (可选)  map 方法调用的数组
     * @param thisArg(可选)
     * 执行 callback 函数时值被用作this
     * @returns 一个由原数组每个元素执行回调函数的结果组成的新数组
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     const result = arr.map(value => value * 2)
     console.log(result)  // [6, 10, 0, 6, 4, 14, 8, 12, 16, 18, 2]
    
    reduce

    对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值

    /**
     * arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
     * @param callback
     * 执行数组中每个值 (如果没有提供 initialValue则第一个值除外)的函数,包含四个参数:
     * accumulator 累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue(见于下方)
     * currentValue  数组中正在处理的元素
     * index (可选)  数组中正在处理的当前元素的索引。 如果提供了initialValue,则起始索引号为0,否则从索引1起始
     * array (可选)  调用reduce()的数组
     * @param initialValue(可选)
     * 作为第一次调用 callback函数时的第一个参数的值。
     * 如果没有提供初始值,则将使用数组中的第一个元素。
     * 在没有初始值的空数组上调用 reduce 将报错
     * @returns 函数累计处理的结果
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     const reducer = (accumulator, currentValue) => accumulator + currentValue;
     console.log(arr.reduce(reducer))  // 48
     console.log(arr.reduce(reducer, 10))  //  58
    
    reduceRight

    接受一个函数作为累加器(accumulator)和数组的每个值(从右到左)将其减少为单个值

    /**
     * arr.reduceRight(callback(accumulator, currentValue[, index[, array]])[, initialValue])
     * @param callback
     * 一个回调函数,用于操作数组中的每个元素,它可接受四个参数:
     * accumulator
     * 累加器:
     * 上一次调用回调函数时,回调函数返回的值。
     * 首次调用回调函数时,如果 initialValue 存在,累加器即为 initialValue,
     * 否则须为数组中的最后一个元素(详见下方 initialValue 处相关说明)
     * currentValue 当前元素:当前被处理的元素
     * index (可选)  数组中当前被处理的元素的索引
     * array (可选)  调用 reduceRight() 的数组
     * @param initialValue(可选)
     * 首次调用 callback 函数时,累加器 accumulator 的值。
     * 如果未提供该初始值,则将使用数组中的最后一个元素,并跳过该元素。
     * 如果不给出初始值,则需保证数组不为空。
     * 否则,在空数组上调用 reduce 或 reduceRight 且未提供初始值
     * (例如 [].reduce( (acc, cur, idx, arr) => {} ) )的话,
     * 会导致类型错误 TypeError: reduce of empty array with no initial value)
     * @returns 执行之后的返回值
     **/
     const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
     const temp = [9, 8]
     const result = [arr, temp].reduceRight((accumulator, currentValue) => accumulator.concat(currentValue))
     console.log(result)  // [9, 8, 3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
    

    相关文章

      网友评论

          本文标题:JS中数组对象有原生方法

          本文链接:https://www.haomeiwen.com/subject/wxplsktx.html