常用的数组业务处理

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);

 

posted @ 2019-08-05 11:26  心向阳  阅读(234)  评论(0编辑  收藏  举报