常用的数组业务处理
1、根据数组中的某个属性进行排序
运用场景:后端传回来的数据没有排序,前端自己根据数组中的对象的某个属性进行排序
[{order:0,name:'小米'},{order:6,name:'小米2'},{order:3,name:'小米2'}] 根据order进行排序
this.allData.sort(function(a, b) { return parseInt(a.order) - parseInt(b.order) //相当于sort()中的a-b 升序 })
多个嵌也是同理
this.project.map((item) => { item.gradeList.map((innerItem) => { if(innerItem.madelList) { innerItem.madelList.sort(function(a, b) { return parseInt(a.medalType) - parseInt(b.medalType) //相当于sort()中的a-b,medalType是排序的属性
}) } }) })
2、提取对象数组中的某个属性组成一个新数组,使用map
let arr = [{a:1,b:2},{a:2,b:3},{a:3,b:4}] let arr2 = arr.map(item => item.a)
console.log(arr) // [{a:1,b:2},{a:2,b:3},{a:3,b:4}]
console.log(arr2) // [1,2,3]
3、筛选,在某个数组里面赛选出另一个数组里面的值,组成新数组
this.guestOfficerData = this.guestOfficeOptions.filter((item) => { return this.guestOfficerList.some(item2 => item2 === item.officerCode) })
4、数组内元素属性求和
//数组内元素属性求和 var arr = [{num:0},{num:1},{num:2},{num:3},{num:4}]; var sum = arr.reduce((prev,cur) => prev+cur.num , 0 ); // sum 为 10 // prev初始值设置为0,否则将默认为{num:0},无法累加5、
5、统计字符串中每个字符出现次数
//统计字符串中每个字符出现次数 var str = 'aaabbccddddd' var strArr = str.split('') var strArrRes = strArr.reduce(function(res, cur) { res[cur] ? res[cur] ++ : res[cur] = 1 return res; },{}) // 将res为初始化为一个空对象,否则res默认为‘a’字符串,即strArr的第一个元素 console.log(strArrRes); // {a: 3, b: 2, c: 2, d: 5}
6、计算所有商品在不同汇率下的总价格
//计算所有商品在不同汇率下的总价格 //汇率数据对象 var exchangs = {euro: 0.888, dollar: 0.666, rmb: 1} //商品列表 var itemArr = [{price: 10}, {price: 100}, {price: 1000}] //累加器函数 var reducer = function(exc){ //接受 汇率数据参数 返回 一个新函数 作为调用是的参数方法 return function(res,cur){ //遍历所有汇率 将每一种汇率的价格累加 var totalRes = Object.keys(exc).reduce(function(useless,excKey){ res[excKey]?res[excKey]+=cur.price*exc[excKey]:res[excKey]=cur.price*exc[excKey]; return res; },{}); //返回计算结果 return totalRes; } } //使用商品列表 调用reduce 计算结果初始值设置为{euro:0, dollar: 0, rmb: 0} var totalResult = itemArr.reduce(reducer(exchangs),{euro:0, dollar: 0, rmb: 0}); console.log(totalResult);