我试图遍历数组中的所有项目,这些项目包含对象。如果对象中的某个值与另一个对象中的相同值匹配,则它将一起添加另一个值。
示例:
开始于:
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”的附加值用法)。
答案 0 :(得分:1)
假设您的第一个集合是一个数组数组:
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 :(得分:0)
如果您可以使用lodash,这可能是一个不错的选择:
mapData = [{"US", 5}, {"CAN", 9},{"US", 6}];
然后_.sumBy(mapData, 'US')
或_.sumBy(mapData, "CAN")
您需要做的就是将响应映射到对象。我已经给出了流量来获得总和,如果mapData
数组有额外的数据包含“US”或“CAN”,它就会被添加。