【问题标题】:Getting or Copy value from one array of object to another array of object [closed]从一个对象数组获取或复制值到另一个对象数组[关闭]
【发布时间】:2021-07-22 00:16:32
【问题描述】:

要求:

我想要基于唯一 Device_MAC 键的结果数组。

数组 1

let Devices = [
  {
    Device_MAC: '44:6F:28:C1:2E:C0',
    Device_Model: 'Model 1',
    Date: '2021-4-27',
    Total: 66
  },
  {
    Device_MAC: '44:6F:28:C1:2E:C1',
    Device_Model: 'Model 1',
    Date: '2021-4-27',
    Total: 2
  }
]

数组 2

let CompletedArray = [
    { Completed: 58, Device_MAC: '44:6F:28:C1:2E:C0' },
    { Completed: 2, Device_MAC: '44:6F:28:C1:2E:C1' }
  ]

数组 3

let IncompletedArray = [{ Incompleted: 8, Device_MAC: '44:6F:28:C1:2E:C0' } ]

预期的数组结果

let Result = [
  {
    Device_MAC: "44:6F:28:C1:2E:C0",
    Device_Model: "K Lite",
    Date: "2021-4-27",
    Total: 66,
    Complete: 58,
    Incomplete: 8,
  },
  {
    Device_MAC: "44:6F:28:C1:2E:C1",
    Device_Model: "K Lite",
    Date: "2021-4-27",
    Total: 2,
    Complete: 2,
    Incomplete: 0,
  },
];

【问题讨论】:

    标签: javascript node.js arrays


    【解决方案1】:

    const merge = (...arrays) => {
      const merged = {};
      arrays.forEach(a => a.forEach(item => 
        merged[item.Device_MAC] = Object.assign({Incompleted: 0, Completed: 0}, merged[item.Device_MAC], item)));
      return Object.values(merged);
    };
    
    // -----------
    // Test
    
    let Devices = [
      {
        Device_MAC: '44:6F:28:C1:2E:C0',
        Device_Model: 'Model 1',
        Date: '2021-4-27',
        Total: 66
      },
      {
        Device_MAC: '44:6F:28:C1:2E:C1',
        Device_Model: 'Model 1',
        Date: '2021-4-27',
        Total: 2
      }
    ]
    let CompletedArray = [
        { Completed: 58, Device_MAC: '44:6F:28:C1:2E:C0' },
        { Completed: 2, Device_MAC: '44:6F:28:C1:2E:C1' }
      ]
    let IncompletedArray = [{ Incompleted: 8, Device_MAC: '44:6F:28:C1:2E:C0' } ]
    
    console.log(merge(Devices, CompletedArray, IncompletedArray));

    【讨论】:

    • 我还想要Incompleted": 0,在结果中的第二个对象中,因为它不匹配。
    • 也许你可以感谢那些试图帮助你的人,而不是再次要求“我想要”。
    • @Andy 抱歉,我急着得到结果 :)
    • @DhavalDarji 我已经用“你想要什么”更新了答案。
    • @ChristianFritz 感谢您的快速解决方案。
    【解决方案2】:

    所以设法得到这样的结果

    let cStatus = null,IncStatus  = null;
    
    if (Devices.length) {
          Devices.forEach((device) => {
            cStatus = CompletedArray.length
              ? CompletedArray.find((obj) => {
                  return obj.Device_MAC === device.Device_MAC ? obj.Completed : 0;
                })
              : 0;
    
            IncStatus = IncompletedArray.length
              ? IncompletedArray.find((obj) => {
                  return obj.Device_MAC === device.Device_MAC ? obj.Incompleted : 0;
                })
              : 0;
    
    
            device.Completed = cStatus ? cStatus.Completed : 0;
            device.Incompleted = IncStatus ? IncStatus.Incompleted : 0;
          });
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-04
      • 2021-10-09
      • 2023-02-20
      • 2017-07-11
      • 2020-09-17
      • 2011-02-07
      • 2013-02-12
      • 1970-01-01
      相关资源
      最近更新 更多