Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Nhóm giá trị lồng nhau khi so sánh 2 đối tượng - JavaScript

Cho đối tượng JSON phức tạp chứa hai phần before và after, mỗi phần có mảng device với các đối tượng lồng nhau (id, price, features).

Yêu cầu: gom nhóm id và features thành một hàng nếu cùng id xuất hiện ở cả before và after.

Mã thực hiện

const input = { /* ... dữ liệu đầu vào lớn ... */ };
const formatJSON = data => {
  const sub = Object.fromEntries(Object.keys(data).map(k => [k, 0]));
  return Object.values(Object.entries(data).reduce((r, [col, { device }]) => {
    device.forEach(({ id, price, features }) => {
      r[id] = r[id] || [{ id, ...sub }];
      r[id][0][col] = price;
      features.forEach(({ name, price }) => {
        let temp = r[id].find(q => q.name === name);
        if (!temp) r[id].push(temp = { name, ...sub });
        temp[col] = price;
      });
    });
    return r;
  }, {}));
};
console.log(formatJSON(input));

Kết quả

[
  [ { id: '1234', before: '10', after: '50' }, { name: 'samsung', before: '10', after: '20' }, { name: 'Apple', before: '20', after: 0 }, { name: 'Lenovo', before: 0, after: '30' } ],
  [ { id: '2154', before: '20', after: 0 }, { name: 'samsung', before: '30', after: 0 }, { name: 'Moto', before: '40', after: 0 } ],
  [ { id: '2158', before: 0, after: '40' }, { name: 'samsung', before: 0, after: '30' } ]
]