1.哪些方法修改了原数组:
//push()方法
arr = [1,2,3,4,5,6];
var crr = [7]
var brr = arr.push(crr);
console.log(brr);//7 返回数组长度
console.log(arr);//[1, 2, 3, 4, 5, 6, 10]
//pop()方法
arr = [1,2,3,4,5,6,10];
var brr = arr.pop();
console.log(brr);//10 返回被删除的项
console.log(arr);//[1, 2, 3, 4, 5, 6]
//unshift()方法
arr = [1,2,3,4,5,6];
var brr = arr.unshift(10);
console.log(brr);//7 返回数组长度
console.log(arr);//[10, 1, 2, 3, 4, 5, 6]
//shift()方法
arr = [10,1,2,3,4,5,6];
var brr = arr.shift();
console.log(brr);//10 返回被删除的项
console.log(arr);//[1, 2, 3, 4, 5, 6]
//排序 sort()方法
arr = [8,1,7,4,0,6];
var brr = arr.sort();
console.log(brr);//[0, 1, 4, 6, 7, 8]
console.log(arr);//[0, 1, 4, 6, 7, 8]
//翻转 reverse()方法
arr = [8,1,7,4,0,6];
var brr = arr.reverse();
console.log(brr);//[6, 0, 4, 7, 1, 8]
console.log(arr);//[6, 0, 4, 7, 1, 8]
//splice()方法
arr = [8,1,7,4,0,6];
var brr = arr.splice(1,3);
console.log(brr);//[1, 7, 4]
console.log(arr);//[8, 0, 6]
2.数组去重的常见方法:
[...new Set(arr)]
2.利用reduce+includes
function unique(arr){
return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr));
// [1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]
3.利用indexOf去重
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
var array = [];
for (var i = 0; i < arr.length; i++) {
if (array .indexOf(arr[i]) === -1) {
array .push(arr[i])
}
}
return array;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
// [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}] //NaN、{}没有去重
新建一个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组。
其他方法参考:segmentfault.com/a/119000001…
4.扁平化n维数组
let str1=[1,2,[3,4,[5,6]]];
简便方法:str1.flat(3)//[1,2,3,4,5,6]
复杂方法:
function flatten(arr){
//利用递归的方法将数组扁平化,用concat连接起来,直到判断数组中没有数组格式结束递归 返回值
while (arr.some((item)=>Array.isArray(item))){
//主要这里concat方法可以连接数组也可以连接具体的值,因此第一遍循环这里是[],1,2,[3,4,[5,6]]这几个值得拼接
arr=[].concat(...arr)
}
return arr
}
flatten(str1)//[1,2,3,4,5,6]
5.取最大值
let arr=[1,2,3,4,5]
简单方法:Math.max(...arr)
function Max(arr){
arr.reduce((prev,cur)=>Math.max(prev,cur))
}
6.类数组转化
Array.prototype.slice.call(argument)
Array.prototype.slice.apply(argument)
Array.from(argument)
[...argument]