嵌套数组的合并,扁平化数组
1.reduce+concat
let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr= arr.reduce((a,b)=> a.concat(b))
2.toString+split+map
let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr = arr.toString().split(',').map(r=>+r)
数组去重
1.filter + indexOf
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
arr = arr.filter((item, i, arry) => {return arry.indexOf(item) === i })
2.filter + Map
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
let map = new Map()
arr = arr.filter(item=>{return !map.has(item)&&map.set(item,1)})
3.for...of + indexOf + 新数组
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
let newArr = []
for (const item of arr) {
if(newArr.indexOf(item)==-1){
newArr.push(item)
}
}
4.展开运算符+new Set,new Set()将传入的数组转化为对象,用展开运算符将对象转化转为用逗号分隔的参数序列
let arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0, 2, 2, 3];
console.log( [...new Set(arr)])
reduce
封装
Array.prototype.reducee=function (callback,ini=0){
numOne.forEach((item,i,array)=>ini=callback(ini,item))
return ini
}
console.log(numOne.reducee(function(t,item){
return ...
},initValue))
代替map和filter
因为map和filter返回的是数组,所以要实现map的功能,初始值是[]
var numTwo = [1, 2, 3, 4, 5, 6];
var arr = numTwo.reduce((t,item)=>[...t,item],[])//[1, 2, 3, 4, 5, 6]
var arr1= numTwo.reduce((t,item)=>item>3?[...t,item]:[...t],[])//[4, 5, 6]
求数组最大值最小值
//最大值
numOne.reduce((t,item)=>t>item?t:item)
//最小值
numOne.reduce((t,item)=>t<item?t:item)
Array.from映射数组
Array.from可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。
var friends = [
{ name: "John", age: 22 },
{ name: "Peter", age: 23 },
{ name: "Mark", age: 24 },
{ name: "Maria", age: 22 },
{ name: "Monica", age: 21 },
{ name: "Martha", age: 19 },
]
let arr = Array.from(friends,item=>item.name)
//或者解构let arr = Array.from(friends,({name})=>name)
console.log(arr)//["John", "Peter", "Mark", "Maria", "Monica", "Martha"]
用spread运算符(...)将数组转对象
var fruits = ["banana", "apple", "orange", "watermelon"];
var fruitsObj = { ...fruits };
console.log(fruitsObj);//{0: "banana", 1: "apple", 2: "orange", 3: "watermelon"}
空数组
将数组的长度设为0
数据填充数组
var newArray = new Array(10).fill("1");
console.log(newArray);
// returns ["1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"]
合并数组
var fruits = ["apple", "banana", "orange"];
var meat = ["poultry", "beef", "fish"];
var vegetables = ["potato", "tomato", "cucumber"];
var food = […fruits, …meat, …vegetables];
求两个数组的交集(filter+includes)
var numOne = [0, 2, 4, 6, 8, 8];
var numTwo = [1, 2, 3, 4, 5, 6];
var duplicatedValues = […new Set(numOne)].filter(item => numTwo.includes(item));
数组中删除假值(Boolean+filter)
var mixedArr = [0, "blue", "", NaN, 9, true, undefined, "white", false];
var trueArr = mixedArr.filter(Boolean);
console.log(trueArr);