例如,我有以下对象数组:
data = [{id:name1, num1:12, num2:8},
{id:name2, num1:5, num2:13},
{id:name3, num1:21, num2:4}];
我想知道,我怎么能只提到财产" num1"所有物品或" num2"考虑到,我不知道物业的确切名称。 因此,如果我想找到所有num2的总和,我不能简单地编写以下代码:
data.forEach(function(obj) {
Sum += obj.num2;
};
原因" num2"可能不会被称为" num2"但任何其他名称,取决于生成的报告(数据来自Microstrategy报告系统)。每次只是为了满足属性名称而更改代码是不方便的。
非常感谢任何帮助! :)
答案 0 :(得分:0)
这可能有点矫枉过正,但这是我从原始
创建Sum对象的方法data = [{
id: 'name1',
num1: 12,
num2: 8
}, {
id: 'name2',
num1: 5,
num2: 13
}, {
id: 'name3',
num1: 21,
num2: 4
}];
var Sum = {};
data.forEach(function(obj) {
var keys = Object.keys(obj);
keys.forEach(function(k) {
if( i )
if (Sum.hasOwnProperty(k)) {
Sum[k] += obj[k];
} else {
Sum[k] = obj[k];
}
})
})
console.log(Sum);
https://jsfiddle.net/d6vttp9v/
注意:这也是字符串字段的总和,所以它是一种废话,但你可以很容易地指定要排除的列数组(为读者练习)。
所以这个答案并没有让你得到你想要的东西(我不确定你想要的是什么),但希望它是朝着正确方向迈出的一大步。
答案 1 :(得分:-2)
您可以访问对象属性,如下所示:
var x = { someProp1: 'x', someProp2: 'y' };
for(prop in x) {
console.log(prop);
}
这是一个方便的reference
如果这个问题更普遍地是关于JSON对象中的模式更改,那么最好的方法是什么,这是我使用的一个角度。
例如ajax call getPeople
myApp.ajaxSchemas.getPeople = {
NAME: 'Name',
AGE: 'Age'
};
然后我会在代码中引用架构:
someObject[myApp.ajaxSchemas.getPeople.NAME];
这意味着当一个架构发生变化时,它会在一个地方进行管理,myApp.ajaxSchemas.getPeople
定义。
我希望这会有所帮助。
里斯