如何从对象中检索动态变量

时间:2013-04-15 07:25:24

标签: javascript arrays underscore.js

我有一个看起来像这样的js对象:

            var detailsArray = [
                                 {a0 :1,
                                  b0 :'A'},
                                 {a1 :2,
                                  b1 :'B'},
                                 {a2 :3,
                                  b2 :'C'},
                                 {a3 :4,
                                  b3 :'D'}];

这是从服务器端创建对象的方式。在客户端,我想检索所有'a'的值并将它们添加到数组中。问题是变量名称正在根据索引号而变化。我尝试使用underscore.js做这样的事情:

          var variableA = new Array();
          for(var i = 0;i<detailsArray.length;i++){
            var temp = 'a' + i;
            variableA[i] = _.pluck(detailsArray,temp);
          }              

但这不起作用。任何人都可以告诉如何获取值

4 个答案:

答案 0 :(得分:3)

有两种方法可以在javascript中访问对象的属性:像刚才那样使用 dot ,或者使用数组语法风格。

var obj = {'a':5};

obj.a
obj['a']

所以使用你的代码,这会给出这个:

var variableA = new Array();
for(var i = 0;i<detailsArray.length;i++){
    variableA[i] = detailsArray[i]['a' + i];
}

答案 1 :(得分:1)

使用下划线,你可以这样做:

_.reduce(_.map(detailsArray, function(o, i) {
    return o['a' + i];
}), function(a, b) {
    return a + b;
});

在新版浏览器中使用原生JS:

detailsArray.map(function(o, i) {
    return o['a' + i];
}).reduce(function(a, b) {
    return a + b;
});

答案 2 :(得分:0)

这是一个可能的实现

var tmp = []; 
for (var i = 0; i < detailsArray.length; i++) { 
   var obj = detailsArray[i]; // current object at index
   for (var props in obj) { // iterate properties in current object
       if (props.charAt() == "a") { // if starts with a....
           tmp.push(obj[props]);  // add value to array
           break; // stop the property iteration and move to next object
        }
   } 
}
console.log(tmp); // [1,2,3,4]

答案 3 :(得分:0)

您也可以这样做:

for (var i = 0; i < detailsArray.length; i++)
  alert(eval("detailsArray[" + i + "].a" + i));

我提供的代码将alert对应于json数组中的所有值,但显然您可以使用获得的值执行任何操作。

在这里,我指望所有的键都是那种,但我认为这是一个安全的假设。