一、操作方法(改变原数组)
1、push() 向后添加一个元素,返回新数组的长度
let arr = [1, 2, 3, 4]let x = arr.push(99);console.log(arr); // [1, 2, 3, 4, 99]console.log(x); // 5
2、pop() 从后删除一个元素,返回被删除的元素
let arr = [1, 2, 3, 4, 99]let x = arr.pop()console.log(arr); // [1, 2, 3, 4]console.log(x); // 99
3、unshift() 向前添加一个元素,返回新数组的长度
let arr = [1, 2, 3, 4]let x = arr.unshift(99)console.log(arr); // [99, 1, 2, 3, 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]
