JS基础:15、数组常用方法总结

563 阅读3分钟

引言

话不多说,开整

1、前增 unshift() 改变原数组

let arr = [1,2];
let res = arr.unshift(0);
console.log(arr); // [0,1,2]
console.log(res); // 3 返回数组长度

2、后增 push() 改变原数组

let arr = [1,2];
let res = arr.push(0);
console.log(arr); // [1,2,0]
console.log(res); // 3 返回数组长度

3、后删 pop() 改变原数组

let arr = [1,2];
let res = arr.pop(0);
console.log(arr); // [1]
console.log(res); // 2 返回删除的元素

4、前删 shift() 改变原数组

let arr = [1,2];
let res = arr.shift(0);
console.log(arr); // [2]
console.log(res); // 1 返回删除的元素

5、改 splice(i, n, t) 改变原数组 i下标 n个数 t替换值

let arr = [1,2];
let res = arr.splice(0,2,5);
console.log(arr); // [5]
console.log(res); // [1, 2] 返回删除元素组成的数组

6、查 不改变原数组

// indexOf() 正查
let arr = [1,2,2];
let res = arr.indexOf(2);
console.log(arr); // [1,2]
console.log(res); // 1 返回元素的下标  没找到返回 -1

// lastIndexOf() 倒查
let arr = [1,2,3,4,2];
let res = arr.lastIndexOf(2);
console.log(arr); //  [1,2,3,4,2]
console.log(res); // 4 返回元素的下标  没找到返回 -1

7、拼 concat() 不改变原数组

let arr = [1,2];
let res = arr.concat(3);
console.log(arr); // [1,2]
console.log(res); // [1,2,3] // 返回拼接的数组

8、转 不改变原数组

// join(n) 数组转字符串 n字符
let arr = [1,2];
let res = arr.join(',');
console.log(arr); // [1,2]
console.log(res); // '1,2' 返回字符串

// split(n) 字符串转数组 n字符
let arr = '1,2';
let res = arr.split(',');
console.log(arr); // '1,2'
console.log(res); // [ '1', '2' ]

9、排 改变原数组

// sort((a, b) =>a - b)正序  倒序(b-a)
let arr = [1,5,3,4,2];
let res = arr.sort((a, b) =>a - b);
console.log(arr); // [1,2,3,4,5]
console.log(res); // [1,2,3,4,5]

10、反转 reverse 改变原数组

let arr = [1,5,3,4,2];
let res = arr.reverse();
console.log(arr); // [2,4,3,5,1]
console.log(res); // [2,4,3,5,1]

11、截 slcie(start,end) 不改变原数组

let arr = [1,5,3,4,2];
let res = arr.slice(1);
console.log(arr); // [1,5,3,4,2]
console.log(res); // [5,3,4,2]
console.log(arr.slice()); // [1,5,3,4,2] 深拷贝 局限性请看上篇文末 

12、遍历 forEach(callback) 能改变原数组 无法return

let arr = [1,2,3]
let res = arr.forEach((v,i)=>{
    arr[i] = v + 1;
    return arr;
})
console.log(arr) // [2,3,4]
console.log(res) // undefined

13、映射 map(callback) 不改变原数组 要return 返回新数组

let arr = [1,2,3]
let res = arr.map((v,i)=>{
    return v * 2
})
console.log(arr); // [1,2,3]
console.log(res); // [2,4,6]

14、过滤 filter(callback) 不改变原数组 要return 返回符合条件的新数组

let arr = [1,2,3]
let res = arr.filter((v,i)=>{
    return v < 3
})
console.log(arr); // [1,2,3]
console.log(res); // [1,2]

15、判断 some(callback) / every(callback) 返回布尔值 不改变原数组

// some 只要数组中有一个满足条件 就返回true
let arr = [1,2,3]
let res = arr.some((v,i)=>{
    return v < 3
})
console.log(arr); // [1,2,3]
console.log(res); // true

// every 要数组中所有元素都满足条件 才返回true
let arr = [1,2,3]
let res = arr.every((v,i)=>{
    return v < 3
})
console.log(arr); // [1,2,3]
console.log(res); // false

16、迭代 reduce(callback, initVal) initVal初始值 不改变原数组

1.求值

let arr = [1,2,3,4]
let res = arr.reduce((preValue, curValue) => {
   return preValue + curValue
},0)
console.log(arr); // [1,2,3,4]
console.log(res); // 10

2.数组去重

let arr = [1,2,3,4,2,3,1]
let res = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
},[])
console.log(arr); // [1,2,3,4,2,3,1]
console.log(res); // [1,2,3,4]

3.计算数组中元素出现次数

let animals = ['dog''pig''cat''pig','dog'];

let animalsNum = animals.reduce((pre,cur)=>{
  if(cur in pre){
    pre[cur]++
  }else{
    pre[cur] = 1
  }
  return pre
},{})
console.log(animalsNum); // { dog: 2,pig: 2,cat: 1 }

4.转一维数组

let arr = [[0, 1], [2, 3], [4,[5,6]]]
let flat = function(arr){
   return arr.reduce((pre,cur)=>{
     return pre.concat(Array.isArray(cur) ? flat(cur) : cur)
   },[])
}
console.log(flat(arr)); //[0, 1, 2, 3, 4, 5, 6]

17、变 Array.from() 不改变原数组 将伪数组转为真实数组

function fn(a,b,c){
  let res = Array.from(arguments);
  res.push(4); // 能调用push方法了
  console.log(res);// [1,2,3,4]
}
fn(1,2,3);

// 具有length属性的就可以转成数组
let str = '123';
let res = Array.from(str);
console.log(res); // [ '1', '2', '3' ]

18、包含 includes() 不改变原数组 返回布尔值

let arr = [1,2,3]
let res = arr.includes(3);
console.log(arr); // [1,2,3]
console.log(res); // true

总结

数组的方法有很多,我写的都是相对比较常用的,如有小伙伴知道更多常用的方法,评论告诉我呦,数组的方法主要注意改不改变原数组,上面的我都有标注,有错误的话也请在评论里指正呦。