如果属性名称可以是any,则如何引用object属性

时间:2016-03-24 16:02:35

标签: javascript arrays

例如,我有以下对象数组:

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报告系统)。每次只是为了满足属性名称而更改代码是不方便的。

非常感谢任何帮助! :)

2 个答案:

答案 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定义。

我希望这会有所帮助。

里斯