求和复杂javascript对象属性

求和复杂javascript对象属性,javascript,Javascript,我有一个复杂的javascript对象 var obj = {foo: {bar: {baz1 : {price: 200},baz2: {price: 300}}}; 我怎样才能得到它的价格属性的总和? 谢谢你试试这个 var sum = 0; for(var i in obj.foo.bar){ sum += obj.foo.bar[i].price; } console.log(sum); 试试这个 var sum = 0; for(var i in obj.foo.bar)

我有一个复杂的javascript对象

var obj = {foo: {bar: {baz1 : {price: 200},baz2: {price: 300}}};
我怎样才能得到它的价格属性的总和? 谢谢你试试这个

var sum = 0;

for(var i in obj.foo.bar){

sum += obj.foo.bar[i].price;

}

console.log(sum);
试试这个

var sum = 0;

for(var i in obj.foo.bar){

sum += obj.foo.bar[i].price;

}

console.log(sum);

下面是另一个递归函数。有关详细信息,请查看
getPriceSum()
函数的代码-魔法是通过方法和递归调用完成的

var obj={
傅:{
酒吧:{
baz1:{
售价:200
},
baz2:{
价格:300
}
}
}
};
var priceSum=getPriceSum(obj);
console.log('价格之和为'+价格之和);
var obj={
傅:{
价格:100,
酒吧:{
baz1:{
售价:200
},
baz2:{
价格:300
},
baz3:{
售价:250
},
}
}
};
var priceSum=getPriceSum(obj);
log('另一个测试-价格为'+priceSum');
函数getPriceSum(obj){
var sum=Object.keys(obj).reduce(函数(sum,prop){
如果(对象的类型[prop]=“对象”){
返回和+获取价格和(obj[prop]);
}  
如果(价格){
返回和+对象[prop];
}
}, 0);
回报金额;

}
这里是另一个使用递归的函数。有关详细信息,请查看
getPriceSum()
函数的代码-魔法是通过方法和递归调用完成的

var obj={
傅:{
酒吧:{
baz1:{
售价:200
},
baz2:{
价格:300
}
}
}
};
var priceSum=getPriceSum(obj);
console.log('价格之和为'+价格之和);
var obj={
傅:{
价格:100,
酒吧:{
baz1:{
售价:200
},
baz2:{
价格:300
},
baz3:{
售价:250
},
}
}
};
var priceSum=getPriceSum(obj);
log('另一个测试-价格为'+priceSum');
函数getPriceSum(obj){
var sum=Object.keys(obj).reduce(函数(sum,prop){
如果(对象的类型[prop]=“对象”){
返回和+获取价格和(obj[prop]);
}  
如果(价格){
返回和+对象[prop];
}
}, 0);
回报金额;
}
jQuery

var sum = 0

$.each(obj.foo.bar, function(index, value) {
    sum += value.price
}); 

console.log(sum)
仅限Javascript:

var sum = 0

Object.keys(obj.foo.bar).map(function(objectKey, index) {
    var value = obj.foo.bar[objectKey];
    sum += value.price
});

console.log(sum)
jQuery

仅限Javascript:

var sum = 0

Object.keys(obj.foo.bar).map(function(objectKey, index) {
    var value = obj.foo.bar[objectKey];
    sum += value.price
});

console.log(sum)

您可以尝试使用递归函数来查看每个属性

var sum = 0;
function recursive(obj) {
    $.each(obj, function(key, value) {
        if (typeof value === "object") { //is it an object?
            recursive(value);
        } else {
            sum += parseFloat(value); //if value is string, this will be 0
        }
    }
}

您可以尝试使用递归函数来查看每个属性

var sum = 0;
function recursive(obj) {
    $.each(obj, function(key, value) {
        if (typeof value === "object") { //is it an object?
            recursive(value);
        } else {
            sum += parseFloat(value); //if value is string, this will be 0
        }
    }
}

您可以使用两步方法,找到具有给定属性名的所有值,然后聚合这些值

函数getValues(对象、键){
返回Object.keys(Object).reduce(函数r,k){
if(对象[k]&&typeof对象[k]='object'){
返回r.concat(getValues(对象[k],键));
}
如果(k==键){
r、 推(对象[k]);
}
返回r;
}, []);
}
var object={foo:{bar:{baz1:{price:200},baz2:{price:300}},
结果=获取值(对象“价格”)。减少((a,b)=>a+b);

控制台日志(结果)您可以使用两步方法,找到具有给定属性名的所有值,然后聚合这些值

函数getValues(对象、键){
返回Object.keys(Object).reduce(函数r,k){
if(对象[k]&&typeof对象[k]='object'){
返回r.concat(getValues(对象[k],键));
}
如果(k==键){
r、 推(对象[k]);
}
返回r;
}, []);
}
var object={foo:{bar:{baz1:{price:200},baz2:{price:300}},
结果=获取值(对象“价格”)。减少((a,b)=>a+b);


控制台日志(结果)(obj.foo.bar.baz1.price+obj.foo.bar.baz2.price)
肯定有需要。因为有很多baz对象。baz1:{price:200},baz2:{price:200},baz100:{price:200}@TreeNguyen有什么例子吗?Thanks@Artdark92我已经提供了答案。请看一看,我认为递归函数是可行的。只需检查属性本身,为每个属性再次调用它,依此类推。如果没有,那么你必须自己分割层为什么你认为它很复杂,需要递归吗?通常可以这样做
(obj.foo.bar.baz1.price+obj.foo.bar.baz2.price)
肯定有需要。因为有很多baz对象。baz1:{price:200},baz2:{price:200},baz100:{price:200}@TreeNguyen有什么例子吗?Thanks@Artdark92我已经提供了答案。请看一看,它行得通。但是,foo和bar的属性名称可能会更改,并且此解决方案将不起作用。无论如何,谢谢你的回答!它起作用了。但是,foo和bar的属性名称可能会更改,并且此解决方案将不起作用。无论如何,谢谢你的回答!谢谢!很好!谢谢!很好!它起作用了。但是,foo和bar的属性名称可能会更改,并且此解决方案将不起作用。无论如何,谢谢你的回答!它起作用了。但是,foo和bar的属性名称可能会更改,并且此解决方案将不起作用。无论如何,谢谢你的回答!很好!谢谢!很好!谢谢!很好!谢谢!听起来很棒!我很高兴这段代码对您有所帮助。祝你好运很好!谢谢!听起来很棒!我很高兴这段代码对您有所帮助。祝你好运