1.join方法 用特定的字符链接数组的每一项,返回一个字符串
let arrJoin = [1, 2, 3, 4, 5]
console.log(arrJoin.join('-'));
//1-2-3-4-5
2.split方法 用特定的字符分割字符串的每一项,返回一个数组
let strSplit = '12345'
console.log(strSplit.split(''));
// [ '1', '2', '3', '4', '5' ]
3.push方法 在数组的最后增加元素
// 返回值是新数组的长度!!!
// 修改了原数组
let arrPush = [1, 2, 3, 4, 5]
console.log(arrPush.push(2));
//6
console.log(arrPush);
//[ 1, 2, 3, 4, 5, 2 ]
4.pop方法 删除数组最后一个元素
// 返回值是这个元素
// 修改了原数组
let arrPop = [1, 2, 3, 4, 5]
console.log(arrPop.pop());
//5
console.log(arrPop);
//[ 1, 2, 3, 4 ]
5.unshift方法 添加一个或多个元素到数组最前面
// 返回值是添加后的数组长度
let arrUnshift = [1, 2, 3, 4, 5]
console.log(arrUnshift.unshift(0, 2));
//7
console.log(arrUnshift);
//[0,2,1, 2, 3, 4, 5]
6.shift 删除数组最前面的元素,返回值是这个元素
// 修改了原数组
let arrShift = [1, 2, 3, 4, 5]
console.log(arrShift.shift())
//1;
console.log(arrShift)
//[2,3,4,5];
7.reverse 翻转数组
let arrReverse = [1, 2, 3, 4, 5]
console.log(arrReverse.reverse());
// [ 5, 4, 3, 2, 1 ]
8.sort 排序 写一个回调函数 接收两个参数
// 返回 a-b从小到大排序
// 返回 b-a从大到小排序
let arrSort = [2, 4, 3, 1]
console.log(arrSort.sort((a, b) => {
// return a - b
//[1,2,3,4]
return b - a
//[4,3,2,1]
}));
9.concat 拼接 把两个数组的每一项拿出来拼接到一起
// 原数组不受影响
let arrConcat = [1, 2, 3]
let arrConcat2 = [4, 5, 6]
console.log(arrConcat.concat(arrConcat2));
//[ 1, 2, 3, 4, 5, 6 ]
console.log(arrConcat)
//[ 1, 2, 3 ]
console.log(arrConcat2);
//[ 4, 5, 6 ]
10.slice 截取
let arrSlice = [1, 2, 3, 4, 5]
console.log(arrSlice.slice(0, 2))
//从下标0开始,截取两个 返回一个新数组 [1,2];
console.log(arrSlice.slice(1))
//从下标1开始,截取后面的全部 返回一个新数组 [2,3,4,5];
console.log(arrSlice.slice());
//截取全部 返回一个新数组[1,2,3,4,5]
10.1 使用slice完成深拷贝操作
let arrSlice = [1, 2, 3, 4, 5]
let arrSlice2 = arrSlice.slice()
console.log(arrSlice);
//[1, 2, 3, 4, 5]
console.log(arrSlice2);
//[1, 2, 3, 4, 5]
console.log(arrSlice2 === arrSlice);
//false
11.splice 删除或替换或增加元素
let arrSplice = [1, 2, 3, 4, 5]
// 从下标0开始,删除一个
arrSplice.splice(0, 1)
console.log(arrSplice);//[ 2, 3, 4, 5 ]
// 从下标0开始 删除1个,替换1个
arrSplice.splice(0, 1, 1)
console.log(arrSplice);//[1,3,4,5]
// 从下标1开始 删除0个 添加一个 下标1和后面的全部后移
arrSplice.splice(1, 0, 2)
console.log(arrSplice);//[1,2,3,4,5]
12.indexOf 查找元素在数组中 第一次 出现的位置,没有则返回-1
let arrIndexOf = [1, 2, 3, 4, 5]
console.log(arrIndexOf.indexOf(1));
// 0
//判断元素在数组中是否存在
if (arrIndexOf.indexOf(6) === -1) {
console.log('元素不存在')
} else {
console.log('元素存在');
}
//元素不存在
13.map 映射 返回一个对原数组进行 加工 后的新数组
// 长度不变
// 不修改原数组
let arrMap = [1, 2, 3, 4, 5]
let arrMap2 = arrMap.map((item, index, arr) => {
if (item == 2) {
return item * 2
}
return item
})
console.log(arrMap2);
//[ 1, 4, 3, 4, 5 ]
14.filter 过滤 返回一个满足 过滤 条件的新数组
// 长度可以变化
// 不修改原数组
let arrFilter = [1, 2, 3, 4, 5]
// 过滤偶数项
let arrFilter2 = arrFilter.filter((item, index) => {
return item % 2 === 0
})
console.log(arrFilter2);
//[2,4]
//过滤出布尔类型为true的项
let arrFilter3 = [1, '', false, 4, 5]
let arrFliter4 = arrFilter3.filter(item => {
return item
})
console.log(arrFliter4);
//[1,4,5]
15.some 一真则真
// 返回值是布尔值
let someArr = [
{ name: 'zs', age: 17 },
{ name: 'ls', age: 19 },
{ name: 'ww', age: 20 }
]
console.log(someArr.some(item => {
return item.age % 2 === 0
}));
//true
16.every 一假则假
// 返回值是布尔值
let arrEvery = [
{ name: 'zs', age: 18 },
{ name: 'ls', age: 19 },
{ name: 'ww', age: 20 }
]
console.log(arrEvery.every(item => {
return item % 2 === 0
}));
。。false
17.find 返回满足条件的第一项
let arrFind = [0, 1, 2, 3, 4]
console.log(arrFind.find(item => {
return item
}));
//1
18.findIndex 返回满足条件的第一项的下标
let arrFindIndex = [1, 2, 3, 4, 5]
console.log(arrFindIndex.findIndex(item => {
return item % 2 === 0
}));
//1
19.reduce 求和计算
// pre 不传值默认从数组第一位开始
// 第二个pre是第一次相加的结果
// 第二个next是下一个没加的值
let arrReduce = [1, 2, 3, 4, 5]
console.log(arrReduce.reduce((pre, next) => {
return pre + next
}, 0));
//末尾传的 0 当作pre的初始值
// 15
20.reduce + concat 数组扁平化
let arrReduce2 = [
[1, 2],
[3, 4],
[5, 6]
]
console.log(arrReduce2.reduce((pre, next) => {
return pre.concat(next)
}));
//[ 1, 2, 3, 4, 5, 6 ]
21.计算对象数组的值
// 对象数组计算
let arrObj = [
{ price: 10, count: 2 },
{ price: 20, count: 2 },
{ price: 30, count: 2 }
]
console.log(arrObj.reduce((pre, next) => {
return pre + next.price * next.count
}, 0))
//120
22.计算数组的每一项在数组中出现的次数
let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let countedNames = names.reduce((allNames, name) => {
// console.log(allNames, '| ' + name);
if (name in allNames) {
allNames[name]++;
} else {
allNames[name] = 1;
}
return allNames;
}, {});
console.log(countedNames);
//{ Alice: 2, Bob: 1, Tiff: 1, Bruce: 1 }
23.数组扁平化
23.1数组扁平化 递归实现
let arrBph = [
[1, 2],
[3, 4],
[5, 6, [7, 8, [9, 10]]]
]
function flatten(arr) {
let result = []
if (!Array.isArray(arr)) {
result.push(arr)
} else {[
1, 2, 3, 4, 5,
6, 7, 8, 9, 10
]
for (let i = 0; i < arr.length; i++) {
result = result.concat(flatten(arr[i]))
};
}
return result
}
console.log(flatten(arrBph));
//[1,2,3,4,5,6,7,8,9,10]
23.2reduce +concat进阶版(多维)
let arrBph2 = [1, 2, [3, 4, [5, 6]]]
function flatten2(arrBph2) {
return arrBph2.reduce((pre, next) => {
return pre.concat(Array.isArray(next) ? flatten2(next) : next)
}, [])
}
console.log(flatten2(arrBph2));
//[1,2,3,4,5,6]
23.3拓展运算符 只支持一层
let arrBph3 = [1, 2, [3, 4, [5, 6]]]
console.log([].concat(...arrBph3));
//[1,2,3,4,5,6]
23.4 flat方法 自定义扁平化层数
let arrBph4 = [1, 2, [3, 4, [5, 6]]]
console.log(arrBph4.flat(1));//1层
console.log(arrBph4.flat(2));//2层
console.log(arrBph4.flat(Infinity));//无限层
24.数组去重
24.1 Array.from + new Set
let arrQc = [1, 1, 2, 2, 3, 3]
console.log([...new Set(arrQc)]);
//[1,2,3]
24.2 扩展运算符 + new Set
let arrQc = [1, 1, 2, 2, 3, 3]
console.log(Array.from(new Set(arrQc)));
//[1,2,3]
24.3indexOf
let arrQc2 = [1, 1, 2, 2, 3, 3]
function QuChong(arr) {
let newArr = []
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i])
}
};
return newArr
}
console.log(QuChong(arrQc2));
//[1,2,3]
24.4 双层for循环去重
let arrQc3 = [1, 1, 2, 2, 3, 3, 4]
function QuChong2(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1)
}
};
};
return arr
}
console.log(QuChong2(arrQc3));
//[1,2,3,4]