目录
数组元素求和
① reduce()
let arr = [1,2,3]
let res = arr.reduce((x,y) => x+y)
数据去重
① reduce() + includes()/indexOf() + push()
reduce()遍历原数组 + includes()/indexOf()判断元素在新数组中是否存在 + push()向新数组插入当前元素
let arr =['hello','nihao','bonjour','hi','hello','nihao','nihao']
let res = arr.reduce((prev, cur) => {
if(!prev.includes(cur)){
prev.push(cur)
}
return prev
},[]) // 初始值设置为一空数组
② Array.filter() + indexOf() 遍历数组 返回指定条件的元素组成的新数组,不修改原数组
let arr = ['hello','nihao','bonjour','hi','hello','nihao','nihao']
let newArr = arr.filter((v, index)=> {
return arr.indexOf(v) === index // 该元素第一次在数组中出现的位置是否等于当前索引值
})
③ for...of + includes()/indexOf() + push()
for...of 遍历原数组 + includes()/indexOf()判断新数组是否存在当前元素 + push() 向新数组插入当前元素
返回一数组 不修改原数组
let arr = ['hello','nihao','bonjour','hi','hello','nihao','nihao']
let res = []
for(item of arr){
if(!res.includes(item)) {
res.push(item)
}
}
数组平铺
①flat(Infinity)展开任意嵌套的深层数组 不修改原数组 会自动请清除空的元素
let arr = [1,[23,'ok'],123,[2,['3',[12,'hello']],0]]
arr.flat(Infinity)
console.log(arr)// (9) [1, 23, "ok", 123, 2, "3", 12, "hello", 0]
②reduce + concat + 递归
let arr = [1,[23,'ok'],123,[2,['3',[12,'hello']],0]]
function flatten(arr) {
return arr.reduce((prev, cur) => Array.isArray(cur) ? prev.concat(flatten(cur)) : prev.concat(cur), [])// reduce方法初始值设为空数组
}
console.log(flatten(arr)) //(9) [1, 23, "ok", 123, 2, "3", 12, "hello", 0]
求数组最大/小值
Math.max()参数应该传入一参数序列,而不能是数组,即可以使用扩展运算符...或apply将数组转为序列
let arr = [2,26,52,12]
let max = Math.max(...arr)
let min = Math.min.apply(null,arr)
求数组中每个元素出现的次数
let arr =['hello','nihao','bonjour','hi','hello','nihao','nihao']
let res = arr.reduce((prev, cur) => {
if(cur in prev){
prev[cur]++
}else{
prev[cur] = 1
}
return prev
},{})//初始值设为空对象
console.log('元素:出现次数', res) //{hello: 2, nihao: 3, bonjour: 1, hi: 1}
取数组中的部分元素
slice() 取数组指定区域的元素 返回一新数组 不修改原数组
splice() 也可取数组指定区域的元素 但修改了原数组(指定区域的元素作为返回值的同时在原数组中被删除)
shift() 返回数组的第一个元素,但修改了原数组(第一个元素被删除)
pop() 返回数组的最后一个元素,但修改了原数组(最后一个元素被删除)
删除数组中指定元素
function fun(val){
if(arr.includes(val)){
arr.splice(arr.indexOf(val), 1)// 删除该元素
fun(val)// 判断是否有重复的该元素
}
}