javascript - 添加数组中对象的所有匹配值 (Javascript) (Angular)

标签 javascript angular typescript firebase google-cloud-firestore

我在用什么

  • Angular 5
  • AngularFire5
  • Firebase 和 Firestore

我要实现的目标

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

示例:

开始于:

mapData = [{"countryCode":"US", "clicks": 5}, {"countryCode":"CAN", "clicks": 9}, {"countryCode":"US", "clicks": 6}]

mapData = [["US", 5], ["CAN", 9], ["US", 6]]

结束于:

mapDataResults = {
    "US": {
        "usage": 11,
        "fillKey": "tens"
    },
    "CAN": {
        "usage": 9,
        "fillKey": "ones"
    },
}

我被困在哪里

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

最佳答案

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

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

关于javascript - 添加数组中对象的所有匹配值 (Javascript) (Angular),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48176795/

相关文章:

angular - typescript 通用服务

javascript - typescript 为keyof不工作分配值

reactjs - Typescript + React,从无状态功能组件渲染数组

javascript - Jasmine 未在我的浏览器中启动(使用 Backbone 和 RequireJS) - 必须不断刷新

javascript - 如何在 JavaScript 字符串中替换\with\\

javascript - 管道 'AsyncPipe' 的参数无效

java - 包名称为 'com.google.android.gms.license' 的多个库

typescript - 有没有办法强制 "if"在 TypeScript 中只接受 bool 值?

javascript - 为所有浏览器创建零宽度换行点

javascript - CKEditor - 未捕获的类型错误 : Cannot read property 'clearCustomData' of null in Chrome