Javascript 用深度求和数组的总和

Javascript 用深度求和数组的总和,javascript,algorithm,recursion,sum,Javascript,Algorithm,Recursion,Sum,我当然试着寻找一个具体的例子,或者一个例子来让我接近答案。我试图得到一个多深度的物体数组的和 我的数据结构如下: [ { "values":[ { "values":[ { "value":{ "value":"51214.35"

我当然试着寻找一个具体的例子,或者一个例子来让我接近答案。我试图得到一个多深度的物体数组的和

我的数据结构如下:

[
    {
        "values":[
            {
                "values":[
                    {
                        "value":{
                            "value":"51214.35"
                        },
                    }
                ],
            }
        ],
    },
    {
        "values":[
            {
                "values":[
                    {
                        "value":{
                            "value":"10632.00"
                        },
                    },
                    {
                        "value":{
                            "value":"15000.00"
                        },
                    }
                ],
            }
        ],
    }
]
我想让它们成为每个对象的一个属性,每个对象都有更深入的所有值属性之和

例如:

[
        {
            "total":"51214.35",
            "values":[
                {
                    "total":"51214.35",
                    "values":[
                        {
                            "total":"51214.35",
                            "value":{
                                "value":"51214.35"
                            },
                        }
                    ],
                }
            ],
        },
        {
            "total":"25632.00",
            "values":[
                {
                    "total" : "25632.00",
                    "values":[
                        {
                            "total": "10632.00",
                            "value":{
                                "value":"10632.00"
                            },
                        },
                        {
                            "total": "15000.00",
                            "value":{
                                "value":"15000.00"
                            },
                        }
                    ],
                }
            ],
        }
    ]

我知道递归可能会起作用,因为有一个未知的深度

您可以创建一个函数,该函数接受一个对象,如果该对象具有
值,则将其设置为其
totals
属性。如果它没有对数组中的每个项调用相同函数的总数

你需要小心求和,因为你有字符串而不是数字作为值,否则它是非常简单的递归

let arr=[{“value”:[{“value”:[{“value”:{“value”:{“value”:“51214.35”}、}、}、}、{“value”:[{“value”:{“value”:{“value”:{“value”:“15000.00”}、}、}、}、}、}、}]
函数集合总计(obj){
obj.totals=obj.hasOwnProperty('值')
?parseFloat(对象值值)
:对象值。减少((总和,项目)=>总和+集合总计(项目),0)
返回对象总数
}
arr.forEach(项目=>setTotals(项目))

console.log(arr)
您可以创建一个函数,该函数接受一个对象,如果该对象有一个
值,则将其设置为其
totals
属性。如果它没有对数组中的每个项调用相同函数的总数

你需要小心求和,因为你有字符串而不是数字作为值,否则它是非常简单的递归

let arr=[{“value”:[{“value”:[{“value”:{“value”:{“value”:“51214.35”}、}、}、}、{“value”:[{“value”:{“value”:{“value”:{“value”:“15000.00”}、}、}、}、}、}、}]
函数集合总计(obj){
obj.totals=obj.hasOwnProperty('值')
?parseFloat(对象值值)
:对象值。减少((总和,项目)=>总和+集合总计(项目),0)
返回对象总数
}
arr.forEach(项目=>setTotals(项目))
控制台日志(arr)
const值=[
{
“价值观”:[
{
“价值观”:[
{
“价值”:{
“值”:“51214.35”
},
}
],
}
],
},
{
“价值观”:[
{
“价值观”:[
{
“价值”:{
“值”:“10632.00”
},
},
{
“价值”:{
“价值”:“15000.00”
},
}
],
}
],
}
];
const total=values=>values.reduce((t,i)=>{
const currentTotal=i.value?t+parseFloat(i.value.value):i.values?t+total(i.values):t;
i、 总计=当前总计;
返回总电流;
}, 0);
总数(价值);
console.log(值)
const值=[
{
“价值观”:[
{
“价值观”:[
{
“价值”:{
“值”:“51214.35”
},
}
],
}
],
},
{
“价值观”:[
{
“价值观”:[
{
“价值”:{
“值”:“10632.00”
},
},
{
“价值”:{
“价值”:“15000.00”
},
}
],
}
],
}
];
const total=values=>values.reduce((t,i)=>{
const currentTotal=i.value?t+parseFloat(i.value.value):i.values?t+total(i.values):t;
i、 总计=当前总计;
返回总电流;
}, 0);
总数(价值);
console.log(值)请尝试以下操作:

函数calcTotal(数据){
if(Array.isArray(data))data.map(calcTotal)
设总数=0
如果(data.hasOwnProperty('values'))总计=data.values.map(calcTotal).reduce((acc,v)=>acc+v.total,0)
如果(data.hasOwnProperty('value'))总计=parseFloat(data.value.value)
返回Object.assign(数据,{total})
}(数据)
试试这个:

函数calcTotal(数据){
if(Array.isArray(data))data.map(calcTotal)
设总数=0
如果(data.hasOwnProperty('values'))总计=data.values.map(calcTotal).reduce((acc,v)=>acc+v.total,0)
如果(data.hasOwnProperty('value'))总计=parseFloat(data.value.value)
返回Object.assign(数据,{total})

}(数据)
第二个对象的总值应为
25632.00
,但这会产生
76846.35
,但您已将该总值附加到数组中的第二个对象-
值[1]。总值
76846.35
这不是OP要求的值,也不是
值[1]的总和
第二个对象的总值应为
25632.00
,但这会产生
76846.35
,但您已将该总值附加到数组中的第二个对象-
值[1]。总值为
76846.35
这不是OP要求的值,也不是
值[1]