数组的一些常用方法(持续更新)

313 阅读3分钟

find:遍历查找,返回第一个满足条件的元素

let re = [6, 2, 7, 4, 5, 9].find( function (item, index, o) {
    console.log( item, index, o );
    return item > 6;
} );

输出:7

findIndex:遍历查找,返回第一个满足条件的元素的索引值

let re2 = [6, 2, 7, 4, 5, 9].findIndex(function (item, index) {
    return item > 6
 })
console.log(re2)

输出:2

some:遍历查找,如果有满足条件有一个就会返回true,否则就是false

let re3 = [6, 2, 7, 4, 5, 9].some(function (item, index) {
    return item > 6
 })
console.log(re3)

输出:true

every:遍历查找,每个元素都满足条件则返回true,否则就是false

let re4 = [6, 2, 7, 4, 5, 9].every(function (item, index) {
     return item > 6
 })
 console.log(re4)

输出:false

filter:遍历筛选,筛选出满足条件的元素返回新的数组

let re5 = [6, 2, 7, 4, 5, 9].filter(function (item, index) {
     return item > 6
})
 console.log(re5)

输出:数组[7, 9]

map:遍历数组,让每个元素执行一边回调函数把所有结果放到新数组返回

let re6 = [6, 2, 7, 4, 5, 9].map(function (item, index) {
     return item * item
})
 console.log(re6)

输出:数组[36, 4, 49, 16, 25, 81]

push()方法: 向数组末尾添加一个值

let ary = [1, 2, 3, 4]
 ary.push('abc', 'bcd')
 console.log(ary)

输出:数组[1, 2, 3, 4, "abc", "bcd"]

unshift(): 向数组开始位置添加值

let ary = [1, 2, 3, 4]
ary.unshift('abc', 'bcd')
console.log(ary)

输出:数组["abc", "bcd", 1, 2, 3, 4]

pop(): 从数组中删除一个值,从末尾删除

let ary = [1, 2, 3, 4]
let res = ary.pop()
console.log(ary)
console.log(res)

输出:数组[1, 2, 3] 和 4

shift(): 从数组中删除一个值,从开始删除

let ary = [1, 2, 3, 4]
let res = ary.shift()
console.log(ary)
console.log(res)

输出:数组[2, 3, 4] 和 1

splice()方法

splice(index, count): 可以从指定位置处删除值

index表示从数组中哪个位置删除,表示的就是一个索引号

count表示要删除多少个

let ary = [1, 2, 3, 4, 5, 6, 7, 8]
let res = ary.splice(0, 1)
console.log(res)
ary.splice(ary.length - 1, 1)
ary.splice(2, 1)
console.log(ary)

输出: 数组 [1] 和 数组 [2, 3, 5, 6, 7]

sort() :方法用于对数组的元素进行排序

其中有两个参数 这里用a,b代替

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

若 a 等于 b,则返回 0。

若 a 大于 b,则返回一个大于 0 的值。

若默认不带参数则按照字母的顺序进行排序,

若数组中是数字 则会按照数字的位数依次从0到9排序 如:

let arr = [8,16,50,6,100,1]
console.log(arr.sort())

输出结果为:1,100,16,50,6,8

若想让其按照数字大小进行排序,则还需使用一个排序函数

let arr = [8,16,50,6,100,1]
console.log(arr.sort(sortNumber))

输出结果为:1,6,8,16,50,100

数组随机打乱排序

let arr = ['张三丰', '乔峰', '令狐冲', '张无忌', '贾宝玉', '张飞'];

console.log( arr.sort(function () { return 0.5 - Math.random() }) );

reduce()方法

reduce方法有两个参数,第一个参数是操作数组项的函数;第二个参数则是传入的初始值,reduce最常用的方法是叠加

它会从后面给定的值开始遍历叠加,知道加完所有的项为止

var items = [10, 120, 1000];

// sumSoFar第一次初始值是1,item第一次初始值是数组的第一个元素即10;
var total = items.reduce(function add(sumSoFar, item) { 
    // 1 + 10 = 11
    // 11 + 120 = 131
    // 131 + 1000 = 1131
    console.log(sumSoFar, item);
    return sumSoFar + item;  // 这个值会变成下一次的sumSoFar 
}, 1);

console.log(total); // 1131  

数组之间做减法

<script>
      let arr1 = [
        { id: 0, name: 'a' },
        { id: 1, name: 'b' },
        { id: 2, name: 'c' }
      ]

      let arr2 = [{ id: 1, name: 'b' }]

      // 对arr1中的元素进行循环:
      //    如果当前元素在arr2没有出现过,则留下来;
      //    如果当前元素在arr2有出现过,则放弃掉

      // 本质上,对arr1进行筛选:留下在arr2中没有出现过的元素
      let array = arr1.filter((item1) => {
        // console.log(item1)
        // 如果arr1在arr2没有出现过,则保留
        return arr2.findIndex((item2) => item1.id === item2.id) === -1
      })
      // arr1-arr2 = ?
      console.log(array)
    </script>

还可以使用some方法简写为一行代码

let arr1 = [
        { id: 0, name: 'a' },
        { id: 1, name: 'b' },
        { id: 2, name: 'c' }
      ]
let arr2 = [{ id: 1, name: 'b' }]

return this.arr1.filter((item) => !this.arr2.some(index => index.id === item.id))

输出:

[{ id: 0, name: 'a' }, { id: 2, name: 'c' }]