簡體   English   中英

比較嵌套的對象數組

[英]compare nested arrays of objects

你能幫幫我嗎? 我需要比較並計算值之間的差異百分比並返回一個數組。 我需要比較數組,獲取具有名稱和值的對象,並計算百分比。 假設數組 {name: 'Name 1', value: 1945} 中的第一項,進入第二項以找到 {name: 'Name 1', value: 699}。 1945 年的百分比為 100,為 699 - 36。我對嵌套((

//input data
const data = [
  {
    _id: "0090908",
    groups: [
      {
        _id: "24424",
        name: "Group 1",
        group_type: "group_1",
        items: [
          { name: "Name 1", value: 1945 },
          { name: "Name 2", value: 0 },
          { name: "Name 3", value: 39 },
        ],
      },
      {
        _id: "23030",
        name: "Group 2",
        group_type: "group_2",
        items: [
          { name: "Name 4", value: 67 },
          { name: "Name 5", value: 123 },
          { name: "Name 6", value: 13 },
        ],
      },
    ]
  },
  {
    _id: "00390395",
    groups: [
      {
        _id: "837583",
        name: "Group 1",
        group_type: "group_1",
        items: [
          { name: "Name 1", value: 699 },
          { name: "Name 2", value: 55},
          { name: "Name 3", value: 39 },
        ],
      },
      {
        _id: "8989305",
        name: "Group 2",
        group_type: "group_2",
        items: [
          { name: "Name 4", value: 998 },
          { name: "Name 5", value: 12 },
          { name: "Name 6", value: 485 },
        ],
      },
    ]
  }
];

//result data
const result = [
  {
    _id: "0090908",
    groups: [
      {
        _id: "24424",
        name: "Group 1",
        group_type: "group_1",
        items: [
          { name: "Name 1", value: 1945, percent: 100, best: true },
          { name: "Name 2", value: 0, percent: 0, best: false },
          { name: "Name 3", value: 39, percent: 100, best: true },
        ],
      },
      {
        _id: "23030",
        name: "Group 2",
        group_type: "group_2",
        items: [
          { name: "Name 4", value: 67, percent: 6, best: false },
          { name: "Name 5", value: 123, percent: 100, best: true },
          { name: "Name 6", value: 13, percent: 3, best: true },
        ],
      },
    ]
  },
  {
    _id: "00390395",
    groups: [
      {
        _id: "837583",
        name: "Group 1",
        group_type: "group_1",
        items: [
          { name: "Name 1", value: 699, percent: 36, best: false },
          { name: "Name 2", value: 55, percent: 100, best: true},
          { name: "Name 3", value: 39, percent: 100, best: true },
        ],
      },
      {
        _id: "8989305",
        name: "Group 2",
        group_type: "group_2",
        items: [
          { name: "Name 4", value: 998, percent: 100, best: true },
          { name: "Name 5", value: 12, percent: 9, best: false },
          { name: "Name 6", value: 485, percent: 100, best: true },
        ],
      },
    ]
  }
];

首先,您需要遍歷所有元素,找到每個名稱的最大值。 然后再次運行,放置百分比。

 var best = {}; // Our database of higher values function checkLargest(data) { if (!data) return; // If is iterable perform the function on each element if (Symbol.iterator in Object(data)) for (var el of data) checkLargest(el); if (data.name && data.value !== undefined) if (!best[data.name] || best[data.name] < data.value) best[data.name] = data.value; checkLargest(data.groups); // If doesn't exist will return checkLargest(data.items); } function placePercentages(data) { if (!data) return; if (Symbol.iterator in Object(data)) for (var el of data) placePercentages(el); if (data.name && data.value !== undefined) { var higher = best[data.name]; data.percent = Math.round(data.value / higher * 100); data.best = (higher == data.value); } placePercentages(data.groups); placePercentages(data.items); } const d = [ { _id: "0090908", groups: [ { _id: "24424", name: "Group 1", group_type: "group_1", items: [ { name: "Name 1", value: 1945 }, { name: "Name 2", value: 0 }, { name: "Name 3", value: 39 }, ], }, { _id: "23030", name: "Group 2", group_type: "group_2", items: [ { name: "Name 4", value: 67 }, { name: "Name 5", value: 123 }, { name: "Name 6", value: 13 }, ], }, ] }, { _id: "00390395", groups: [ { _id: "837583", name: "Group 1", group_type: "group_1", items: [ { name: "Name 1", value: 699 }, { name: "Name 2", value: 55}, { name: "Name 3", value: 39 }, ], }, { _id: "8989305", name: "Group 2", group_type: "group_2", items: [ { name: "Name 4", value: 998 }, { name: "Name 5", value: 12 }, { name: "Name 6", value: 485 }, ], }, ] } ]; checkLargest(d); placePercentages(d); console.log(d);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM