![](/img/trans.png)
[英]Compare Two arrays for equality if they have nested objects in Jquery
[英]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.