【问题标题】:How can I merge value from one object to an element in an array of objects?如何将一个对象的值合并到对象数组中的一个元素?
【发布时间】:2022-11-22 13:06:15
【问题描述】:

我有两个数组——一个是字符串,一个是对象。我在第一个数组中找到重复项并进行计数。我想使用 Product2Id 作为键将我在计数对象中找到的整数值添加到 pbentry。老实说,我一直无法弄清楚,而且谷歌数小时也没有结果。

期望的结果:

[{"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)

【问题讨论】:

    标签: javascript


    【解决方案1】:

    下面介绍的是实现预期目标的一种可能方法。

    代码片段

    const myTransform = (countArr, infoArr) => (
      Object.values(        // extract values from intermediate result object below
        infoArr?.reduce(    // use ".reduce()" to generate a map/dictionary using 'Id' as key
          (acc, {Id, ...rest}) => {    // de-structure each item to obtain 'Id'
            acc[Id] ??= {Id, Count: 0, ...rest};    // nullish coalescing assignment
            // update "Count" by filtering 'countArr' and getting the number of times
            acc[Id]["Count"] = countArr?.filter(x => x === Id)?.length;
            // always return the "acc" (ie, accumulator of ".reduce()")
            return acc;
          },
          {}          // initialize "acc" as an empty object
        )
      )               // implicit return
    );
    
    let counts = {};
    let myArray = ["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"
      }
    ];
    
    console.log(
      'counting unique ids:
    ',
      myTransform(myArray, pbentry)
    );
    .as-console-wrapper { max-height: 100% !important; top: 0 }

    解释

    添加到上面的 sn-p 的内联 cmets。

    【讨论】:

      【解决方案2】:

      这一行应该做到这一点,它只是获取您已经计算出的计数并将其附加到您的 pbentry 数组。:

      pbentry = pbentry.map(pb => ({...pb, Count: counts[pb.Product2Id] || 0}))
      

      在计算出计数后添加它:

      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; }); 
      
      pbentry = pbentry.map(pb => ({...pb, Count: counts[pb.Product2Id] || 0}))
      
      console.log(pbentry)

      【讨论】:

        猜你喜欢
        • 2019-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-11
        • 1970-01-01
        • 2021-04-09
        • 1970-01-01
        相关资源
        最近更新 更多