一、操作方法(改变原数组)

splice sort reserver

1、push() 向后添加一个元素,返回新数组的长度

  1. let arr = [1, 2, 3, 4]
  2. let x = arr.push(99);
  3. console.log(arr); // [1, 2, 3, 4, 99]
  4. console.log(x); // 5

2、pop() 从后删除一个元素,返回被删除的元素

  1. let arr = [1, 2, 3, 4, 99]
  2. let x = arr.pop()
  3. console.log(arr); // [1, 2, 3, 4]
  4. console.log(x); // 99

3、unshift() 向前添加一个元素,返回新数组的长度

  1. let arr = [1, 2, 3, 4]
  2. let x = arr.unshift(99)
  3. console.log(arr); // [99, 1, 2, 3, 4]
  4. console.log(x); // 5

4、shift() 从前删除一个元素,返回被删除的元素

let arr = [99, 1, 2, 3, 4]
let x = arr.shift(99)
console.log(arr);  // [1, 2, 3, 4]
console.log(x);    // 99

5、splice(index, len,item) 返回被修改的内容 以数组的形式返回

方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。(若没删除或修改任何内容则返回空数组)

const months = ['Jan', 'March', 'April', 'June'];

months.splice(1, 0, 'Feb');

console.log(months.splice(1, 0, 'Feb'))
// expected output: Array []

// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]

6、reverse() 返回反转后的数组

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

7、sort() 排序 返回排序后的数组。

let arr = [2, 4, 1, 3];
arr.sort((a, b) => a - b);  // [1, 2, 3, 4]
arr.sort((a, b) => b - a);  // [4, 3, 2, 1]

二、操作方法(不改变原数组)

1、slice(start, end) 返回新的数组对象

这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)左闭右开。原始数组不会被改变。

let arr = ['a', 'b', 'c', 'd'];
let x = arr.slice(1, 3);
console.log(x);    // ["b", "c"]
console.log(arr);  // ['a', 'b', 'c', 'd']

2、concat() 连接数组 返回新数组

let arr1 = [1, 2];
let arr2 = [3, 4];
let res = arr1.concat(arr2);
// 可以连接多个  let res = arr1.concat(arr2, arr3, ...)
console.log(res) // [1, 2, 3, 4];

// 还能这样
let arr4 = [1, 2, 3, 4, 5, 6]
let arr5 = arr4.concat(1,'xxx', {a: 1})
console.log(arr5) // [1, 2, 3, 4, 5, 6, 1, "xxx", {a: 1}]

3、join() 拼接字符串 返回新数组

let arr = [1, 2, 3];
console.log(arr.join('-'))  // "1-2-3"
console.log(arr.join(''))   // "123"

三、遍历

1、forEach() 没有返回值

forEach没有返回值,只针对每个元素调用func。
forEach()无法在所有元素遍历完前,终止遍历,或者return 跳出当前循环,
这样的话,使用return失效,空循环就会显示undefined

let arr = [1, 2, 3, 4];
arr.forEach((item, index) => {
    console.log(item, index)  //  1 0    2 1    3 2    4 3
})

2、map() 返回一个新数组

let arr = [1, 2, 3, 4];
let res = arr.map((item, index) => {
    return item + 1;
});
console.log(arr);  // [1, 2, 3, 4]
console.log(res);  // [2, 3, 4, 5]

3、filter() 返回满足条件的新数组

let arr = [1, 2, 3, 4];
let res = arr.filter((item, index) => {
    return item >= 2;
});
console.log(arr);  // [1, 2, 3, 4]
console.log(res);  // [2, 3, 4]

4、some() 其中有满足条件的,返回true

let arr = [1, 2, 3, 4];
let res = arr.some((item, index) => {
    return item > 3;
});
console.log(res);  // true

5、every() 其中每一项都满足条件的,返回true

let arr = [1, 2, 3, 4];
let res = arr.every((item, index) => {
    return item > 3;
});
console.log(res);  // false

let res2 = arr.every((item, index) => {
    return item >= 1;
});
console.log(res2);  // true

6、find() 返回第一个满足条件的值 否则返回 undefined

let arr = [10, 20, 30, 40];
let res = arr.find((item, index) => {
    return item > 20;
});
console.log(res);  // 30

7、findIndex() 返回第一个满足条件的索引

let arr = [10, 20, 30, 40];
let res = arr.findIndex((item, index) => {
    return item > 20;
});
console.log(res);  // 2

8、reduce() 不会改变原来的数组 最终返回一个累计的值

接收一个函数作为累加器,从左到右开始计算,最终返回一个累计的值

var arr = [1,2,3,4];

// total: 必需。初始值, 或者计算结束后的返回值
// currentValue: 必需。当前元素
// currentIndex: 可选。当前元素的索引
// arr:可选。当前元素所属的数组对象。
var res = arr.reduceRight((total, currentValue, currentIndex, arr)=>{
    console.log("total:", total);
    console.log("currentValue:", currentValue);
    return total + currentValue;
}, 10) // 10:可选。传递给函数的初始值
console.log("res: ", res);

// 输出
// total: 10
// currentValue: 4
// total: 14
// currentValue: 3
// total: 17
// currentValue: 2
// total: 19
// currentValue: 1
// res:  20

9、reduceRight() 同上,从右至左

var arr = [1, 1, 2, 2, 3, 3, 4, 4]
var res = Array.from(new Set(arr));
var res2 = [...new Set(arr)]
console.log(res);  // [1, 2, 3, 4]
console.log(res2); // [1, 2, 3, 4]