处理数据常用方法
let arr = [{ a: 1,b: 2,},{a: 1,b: 4},{a: 1,b: 9,}]
let brr = [1,2,3,4,2,1,5]
数组去重
reduce
let obj = {};
arr = arr.reduce((current,next) => {
obj[next.a] ? "" : obj[next.a] = true && current.push(next);
return current;
},[])
new set
let res = new Set()
arr.filter((arr) => !res.has(arr.a) && res.add(arr.a, 1))
Array.from(new Set(arr))||
[...new Set(arr)]
new Map()
let res = new Map()
arr.filter((arr) => !res.has(arr.a) && res.set(arr.a, 1))
排序
var crr = [{id: 1},{id: 3},{id: 2},{id: 6},{id: 5},{id: 7}]
var compare = function(property) {
return function(a,b) {
var value1 = a[property];
var value2 = b[property];
return value1 - value2
}
}
arr.sort(this.compare("id"))
合并
var drr = [{q:1,w:2},{q:3,w:1}],err=[{q:5,w:0}]
var aObj = {a:2,b:3},bObj = {a:4,b:5}
// 数组
[...drr,...err]
drr.concat(err)
//对象
Object.assign(aObj, bObj)
筛选
let aMap = arr.map(v=>v.b)
// [2,4,9]
let bFilter = arr.filter(v=>v.b<=4)
// [{ a: 1, b: 2, }, { a: 1, b: 4, }]
let bFind = arr.find(v=>v.b<=4)
// { a: 1, b: 2, }
判断是否存在
arr.some(v=>v.b<=4) // true
arr.every(v=>v.a==4) // true
brr.includes(2);// true
'dsfdgd'.includes(s);//true
数组拍平
思想:判断循环的元素是不是数组,是数组就再循环一次,不是数组就合并到准备的数组中
①// reduce实现
function fn(arr){
return arr.reduce((prev,cur)=>{
return prev.concat(Array.isArray(cur)?fn(cur):cur)
},[])
}
②// 递归实现
function fn(arr){
let arr1 = []
arr.forEach((val)=>{
if(val instanceof Array){
arr1 = arr1.concat(fn(val))
}else{
arr1.push(val)
}
})
return arr1
}
③// flat
[1,2,[1,5,7]].flat(Infinity)