添加值并合并 json 基于 d3js 中的键的对象

adding values and merging json objects based on key in d3js

当我执行 console.log(variable1) 时,我有一个看起来像这样的变量。


    0: {node01: "site05", amount: 1010}
    1: {node01: "site02", amount: 1200}
    2: {node01: "site08", amount: 880}
    3: {node01: "site04", amount: 870}
    4: {node01: "site01", amount: 650}
    5: {node01: "site06", amount: 1370}
    6: {node01: "site07", amount: 100}
    7: {node01: "site09", amount: 210}
    8: {node01: "site10", amount: 340}

console.log(variable2) 中的另一个变量:


    0: {node02: "site08", amount: 100}
    1: {node02: "site02", amount: 200}
    2: {node02: "site03", amount: 1050}
    3: {node02: "site07", amount: 1300}
    4: {node02: "site09", amount: 850}
    5: {node02: "site10", amount: 890}
    6: {node02: "site04", amount: 640}
    7: {node02: "site06", amount: 290}
    8: {node02: "site01", amount: 50}
    9: {node02: "site05", amount: 200}
    10: {node02: "site11", amount: 1060}

我想根据节点值添加两个变量的数量 例如, "node01":"site05" 有 amount:1010 和 "node02":"site05" 有 amount:200 结果变量应该有 "node":"site05" amount:1210。此外,"site11" 在 variable1 中不存在。所以它应该只有值 "node":"site11" amount:1060 --> 这仅来自 variable2

我尝试使用两个嵌套的 for 循环,但它只会导致节点在一个变量中可用。 我不确定如何映射它们。 另外,是否有仅使用 d3js 而不使用 js 原生的 for 循环的解决方案?据我了解,D3 还有其他一些循环方法

提前致谢

我认为您可能想要准备数据,然后将合并结果发送到 D3。例如:

 const list1 = [
   {node01: "site05", amount: 1010},
   {node01: "site02", amount: 1200},
   {node01: "site08", amount: 880},
   {node01: "site04", amount: 870},
   {node01: "site01", amount: 650},
   {node01: "site06", amount: 1370},
   {node01: "site07", amount: 100},
   {node01: "site09", amount: 210},
   {node01: "site10", amount: 340},
];
const list2 = [
    {node02: "site08", amount: 100},
    {node02: "site02", amount: 200},
    {node02: "site03", amount: 1050},
    {node02: "site07", amount: 1300},
    {node02: "site09", amount: 850},
    {node02: "site10", amount: 890},
    {node02: "site04", amount: 640},
    {node02: "site06", amount: 290},
    {node02: "site01", amount: 50},
    {node02: "site05", amount: 200},
    {node02: "site11", amount: 1060},
];

const combinedList = [
  ...list1,
  ...list2,
];

const output = Object.values(combinedList.reduce((a, c) => {
  const node = Object.values(c).find(v => typeof v === 'string');
  a[node] = a[node] || {node, amount: 0};
  a[node].amount += c.amount;
  return a;
}, {}));

console.log(output);