首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加数组中对象的所有匹配值(Javascript) (角)

添加数组中对象的所有匹配值(Javascript) (角)
EN

Stack Overflow用户
提问于 2018-01-09 21:18:22
回答 2查看 596关注 0票数 1

我用的是

  • 角5
  • AngularFire5
  • [消]火源与火焰恢复

我想要实现的

我试图循环遍历数组中的所有项,数组中包含对象。如果对象中的某个值与另一个对象中的相同值匹配,那么它将一起添加另一个值。

示例:

从以下方面开始:

代码语言:javascript
复制
mapData = [{"countryCode":"US", "clicks": 5}, {"countryCode":"CAN", "clicks": 9}, {"countryCode":"US", "clicks": 6}]

代码语言:javascript
复制
mapData = [["US", 5], ["CAN", 9], ["US", 6]]

结尾:

代码语言:javascript
复制
mapDataResults = {
    "US": {
        "usage": 11,
        "fillKey": "tens"
    },
    "CAN": {
        "usage": 9,
        "fillKey": "ones"
    },
}

我被困在那里

我不知道如何在数组中搜索和匹配不同的对象值。另外,我需要弄清楚如何重新组织数据是如何返回的,而不是需要以JSON格式表示的数组。最后,我想,如果我能得到其他部分的帮助,我可以自己解决这个问题,但是根据点击(或使用)的数量,有一个附加的附加值"fillKey“。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-09 21:29:16

假设您的第一个集合是数组数组:

代码语言:javascript
复制
let entries = [["US", 5], ["CAN", 9],["US", 6]];

function getMostSigDigitName(number) {
    switch(Math.floor(number).toString().length) {
        case 1: return 'ones';
        case 2: return 'tens';
    }
}

function consolidateAndEmit(a) {
    let result = {};
    for(let i=0;i<a.length;i++) {
        let key = a[i][0];
        let val = a[i][1];
        if(result[key]) {//exists, so update
            result[key].usage += val;
        }
        else {//does not exist, so add 
            result[key] = { usage: val};
        }
        result[key].fillKey = getMostSigDigitName(result[key].usage);
    }
    return result;
}

consolidateAndEmit(entries);
票数 1
EN

Stack Overflow用户

发布于 2018-01-09 21:25:47

如果您可以使用房客,这可能是一个很好的方法:

代码语言:javascript
复制
mapData = [{"US", 5}, {"CAN", 9},{"US", 6}];

然后是_.sumBy(mapData, 'US')_.sumBy(mapData, "CAN")

您所需要做的就是将响应映射到对象。我已经给出了获得和的流程,如果mapData数组有包含"US“或"CAN”的额外数据,它就会被添加。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48176795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档