我有一个看起来像这样的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);
}
但这不起作用。任何人都可以告诉如何获取值
答案 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数组中的所有值,但显然您可以使用获得的值执行任何操作。
在这里,我指望所有的键都是那种,但我认为这是一个安全的假设。