合并数组对象中相同的属性值

面试题中往往会遇到这样的笔试题,将以下数组对象合并相同值

var arr = [{
                "name": "语文",
                "fraction": 80
            }, {
                "name": "数学",
                "fraction": 70
            }, {
                "name": "语文",
                "fraction": 50
            }, {
                "name": "语文",
                "fraction": 90
            }, {
                "name": "数学",
                "fraction": 100
            }, {
                "name": "数学",
                "fraction": 55
            }, {
                "name": "语文",
                "fraction": 99
            }]
 
  

 

 
 

 

在实际项目中,我们经常会遇到这种格式的数据,这种格式让人阅读起来很不直观,而且不利于代码的维护。废话不多说了直接上代码

第一种方式:

var res =[];
var narr=[];
    for(var i =0;i<arr.length;i++){
        var n = res.indexOf(arr[i].name);
    if(n == -1){
        res.push(arr[i].name);
        narr.push({"name":arr[i].name,fraction:[arr[i].fraction]})
        }else{
        narr[n].fraction.push(arr[i].fraction)
        }
    }
console.log(narr)    
输出结果:
[{
"name": "语文", "fraction": [80, 50, 90, 99] }, { "name": "数学", "fraction": [70, 100, 55] }, { "name": "英语", "fraction": [55, 89] }]

第二种方式:

arr = arr.map(function(item, index, arr) {
    const i = arr.find(_item => item.name === _item.name);
    if(i !== item) {
        i.fraction.push(item.fraction);
        return undefined;
    } else {
        i.fraction = [i.fraction];
        return i;
    }
}).filter(item => item !== undefined);
输出结果:
[{
    "name": "语文",
    "fraction": [80, 50, 90, 99]
}, {
    "name": "数学",
    "fraction": [70, 100, 55]
}, {
    "name": "英语",
    "fraction": [55, 89]
}]

 

这样看起来是不是顺眼多了。

本人所发博客都是自己所遇到的,从踩坑到填坑的问题。希望与大家多多交流讨论。

 

转载于:https://www.cnblogs.com/hubovv/p/9111075.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值