javascript - 如果属性名称可以是任意的,如何引用对象属性

标签 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 报告系统)。而且每次只为了满足属性名就改代码,很不方便。

非常感谢任何帮助! :)

最佳答案

这可能有点过头了,但这就是我从原始对象创建 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/

注意:这也会对字符串字段求和,所以这有点无意义,但您可以轻松指定要排除的列数组(供读者练习)。

因此,这个答案并不能完全满足您的需求(我不确定您到底想要什么),但希望它是朝着正确方向迈出的良好一步。

关于javascript - 如果属性名称可以是任意的,如何引用对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36204699/

相关文章:

javascript - 有没有API可以获取Chrome扩展程序用户的Google帐户?

javascript - Knockout js 中嵌套模板中的动态数据绑定(bind)

javascript - 将php关联数组转换为javascript对象

php - MySQL SELECT 查询在没有记录的情况下返回多维数组

python - 如何检查 numpy 数组是否包含数字列表?

javascript - 使用JQuery获取不同行上两个表格单元格之间的所有表格单元格

javascript - 自举三态开关

javascript - 现代浏览器如何实现 JS Array,具体是添加元素?

php - 在 php 中返回空数组

arrays - Perl 语法和可读性——在数组引用中查找元素