【问题标题】:Get sum of All Children in parent and child relation from json data从json数据中获取父子关系中所有子节点的总和
【发布时间】:2021-12-26 07:28:27
【问题描述】:

我有一个 Json 数据,它有父、子、孙等关系,就像一棵树 他们每个人都有OpeningDebit和OpeningCredit。

我想获取每个孩子和大孩子的所有借方和贷方的总和,并将其添加到 parentID 为 0 的父级

const { data } = {
  data: [          {
      ID: '1',
      AccountName: "Assets",
      ParentID: "0",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '2',
      AccountName: "Liabilities",
      ParentID: "0",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '3',
      AccountName: "Revenue",
      ParentID: "0",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '4',
      AccountName: "Expenses",
      ParentID: "0",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '5',
      AccountName: "Eqity",
      ParentID: "0",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '39',
      AccountName: "aa",
      ParentID: "38",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '40',
      AccountName: "aaa",
      ParentID: "38",
      OpeningDebit: 60,
      OpeningCredit: 120,
    },
            {
      ID: '41',
      AccountName: "bb",
      ParentID: "39",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '42',
      AccountName: "bbb",
      ParentID: "39",
      OpeningDebit: 180,
      OpeningCredit: 240,
    },
            {
      ID: '6',
      AccountName: "Inventory",
      ParentID: "1",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '7',
      AccountName: "Banks",
      ParentID: "1",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '8',
      AccountName: "Accounts receivable",
      ParentID: "1",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '9',
      AccountName: "Current assets",
      ParentID: "1",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '10',
      AccountName: "Other Assets",
      ParentID: "1",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '11',
      AccountName: "Petty Cash",
      ParentID: "1",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '38',
      AccountName: "a",
      ParentID: "1",
      OpeningDebit: 0,
      OpeningCredit: 0,
    },
            {
      ID: '43',
      AccountName: "bbbb",
      ParentID: "41",
      OpeningDebit: 300,
      OpeningCredit: 360,
    },
  ] ,
}

我试过了,但它说超出了最大调用堆栈大小

const res = data.map((d) => {
  const getSum = (obj, prop) => {
    const children = data.filter(({ ParentID}) => ParentID=== obj.ID)
    if (children.length === 0) return obj[prop]
    return children.reduce((acc, c) => acc + getSum(c, prop), 0)
  }

  return {
    ...d,
    debit: getSum(d, "OpeningDebit"),
    credit: getSum(d, "OpeningCredit"),
  }
})

console.log({ data: res })

【问题讨论】:

  • 向我们展示您的尝试,我们将尝试调试它
  • parent_id === obj.idparent_idid 都不存在于您的数据中
  • 感谢您提及我已修复它,但我仍然没有得到任何东西
  • #ProGu 谢谢它解决了问题请在回答中写下你的评论我会投票非常感谢

标签: javascript php jquery json laravel


【解决方案1】:
const concert = (arr, id = '0') => {
  const res = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i].ParentID === id) {
      const obj = {...arr[i]};
      res.push(obj)
      obj.children =concert(arr,obj.ID)
    }
  }
  return res
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多