如何将计数对象的值按Product2Id合并到对象数组元素中?
问题描述
我拥有两个数组:一个字符串数组,一个对象数组。已统计出字符串数组中重复项的数量,得到counts对象。现需以Product2Id为匹配键,将counts对象中的整数值添加到pbentry数组的对应对象中。尝试多时且查阅资料仍未解决该问题,另外counts中的ID数量与pbentry中的Product2Id数量始终相等。
期望结果
[{"Id":"01u8D00000105oqQAA","Product2Id":"01t8D000001fDfjQAE","Count":"3"}, {"Id":"01u8D00000105oxQAA","Product2Id":"01t8D000001fDfqQAE","Count":"1"}, {"Id":"01u8D00000105p2QAA","Product2Id":"01t8D000001fDfvQAE","Count":"1"}, {"Id":"01u8D000003WBH5QAO","Product2Id":"01t1O000004XyR0QAK","Count":"2"}, {"Id":"01u8D000003WBH0QAO","Product2Id":"01t8D000001hKF1QAM","Count":"1"}....];
现有代码
let counts = {}; let array = ["01t8D0000014jiuQAA", "01t5Y000006VydJQAS", "01t8D000001fDfjQAE", "01t8D000001fDfjQAE", "01t8D000001hKF1QAM", "01t1O000004XyR0QAK", "01t14000006956yAAA", "01t1O000004XyR0QAK", "01t8D000001fDfqQAE", "01t8D000001f1yeQAA", "01t8D000001fDfvQAE", "01t8D000001fDfjQAE"]; let pbentry = [{"Id":"01u8D000003WBHAQA4","Product2Id":"01t14000006956yAAA"},{"Id":"01u8D000003WBH5QAO","Product2Id":"01t1O000004XyR0QAK"}, {"Id":"01u8D000000zEfiQAE","Product2Id":"01t5Y000006VydJQAS"},{"Id":"01u8D000003WBGqQAO","Product2Id":"01t8D0000014jiuQAA"}, {"Id":"01u8D000003WBHyQAO","Product2Id":"01t8D000001f1yeQAA"},{"Id":"01u8D00000105oqQAA","Product2Id":"01t8D000001fDfjQAE"}, {"Id":"01u8D00000105oxQAA","Product2Id":"01t8D000001fDfqQAE"},{"Id":"01u8D00000105p2QAA","Product2Id":"01t8D000001fDfvQAE"}, {"Id":"01u8D000003WBH0QAO","Product2Id":"01t8D000001hKF1QAM"}]; array.forEach(function (x) { counts[x] = (counts[x] || 0) + 1; }); console.log(pbentry)
解决方案
只需遍历pbentry数组,给每个对象添加Count属性,值直接从counts对象中通过Product2Id匹配获取即可。
修改后的完整代码:
let counts = {}; let array = ["01t8D0000014jiuQAA", "01t5Y000006VydJQAS", "01t8D000001fDfjQAE", "01t8D000001fDfjQAE", "01t8D000001hKF1QAM", "01t1O000004XyR0QAK", "01t14000006956yAAA", "01t1O000004XyR0QAK", "01t8D000001fDfqQAE", "01t8D000001f1yeQAA", "01t8D000001fDfvQAE", "01t8D000001fDfjQAE"]; let pbentry = [{"Id":"01u8D000003WBHAQA4","Product2Id":"01t14000006956yAAA"},{"Id":"01u8D000003WBH5QAO","Product2Id":"01t1O000004XyR0QAK"}, {"Id":"01u8D000000zEfiQAE","Product2Id":"01t5Y000006VydJQAS"},{"Id":"01u8D000003WBGqQAO","Product2Id":"01t8D0000014jiuQAA"}, {"Id":"01u8D000003WBHyQAO","Product2Id":"01t8D000001f1yeQAA"},{"Id":"01u8D00000105oqQAA","Product2Id":"01t8D000001fDfjQAE"}, {"Id":"01u8D00000105oxQAA","Product2Id":"01t8D000001fDfqQAE"},{"Id":"01u8D00000105p2QAA","Product2Id":"01t8D000001fDfvQAE"}, {"Id":"01u8D000003WBH0QAO","Product2Id":"01t8D000001hKF1QAM"}]; // 统计字符串数组重复项 array.forEach(function (x) { counts[x] = (counts[x] || 0) + 1; }); // 为每个对象添加Count属性 pbentry.forEach(item => { item.Count = counts[item.Product2Id].toString(); }); console.log(pbentry);
说明
- 遍历
pbentry时,用每个对象的Product2Id作为键,从counts中取出对应数值,转成字符串后赋值给item.Count,和期望结果的格式一致。 - 如果不需要字符串类型的Count值,直接去掉
.toString()即可。
内容的提问来源于stack exchange,提问作者joebob
相关产品推荐
相关产品推荐

