从一个对象数组获取或复制值到另一个对象数组

时间:2021-04-28 15:52:11

标签: javascript node.js arrays

要求:

我想要基于唯一 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,
  },
];

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

所以设法得到这样的结果

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;
      });
    }
相关问题