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

2018-06-24 02:11:54来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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

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]
}]

 

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

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

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JS中如何获取url中的某个参数的值

下一篇:BOM与DOM