很难给这个问题一个好名字。我会跳到示例中:
var people = [
{
john: {
score: 1
}
},
{
adam: {
score: 2
}
}
];
我需要遍历这个对象数组并获取score
值,诀窍是我不知道名称(john
,adam
,...)但是我知道每个都包含score
值。
我如何获得它们?我目前的代码如下:
var pplArr = [];
for (i=0; i<people.length; i++) {
for (var key in people[i]) {
pplArr.push(key);
}
}
for (j=0; j<pplArr.length; j++) {
console.log(pplArr[j]);
//var nameVar = eval(pplArr[j]);
//console.log(people.[j].nameVar.score)
}
评论部分不起作用,因为eval()
返回undefined,否则我认为它会起作用。我还尝试了for (var key in people)
及其变化,但收效甚微。另外我的两个循环看起来过于复杂,有没有更简单的方法?
我正在使用AngularJS(离子)因此我不想使用jQuery。
答案 0 :(得分:2)
您可以使用 map()
和 Object.keys()
。 map()
将有助于迭代数组并且 Object.keys()
有助于将对象键作为数组获取,从数组中获取第一个并获取值。
var people = [{
john: {
score: 1
}
}, {
adam: {
score: 2
}
}];
var res = people.map(function(v) {
return v[Object.keys(v)[0]].score;
});
console.log(res);
&#13;
答案 1 :(得分:1)
由于您不知道每个对象中是否有多个人,您可以在对象中寻找所有名为score的属性,并返回数组中的值,如下所示:
function getAllProperties(o, p){
var properties = [];
Object.keys(o).forEach(function (k) {
if (typeof o[k] === "object") {
properties = properties.concat(getAllProperties(o[k], p));
} else if (k === p) {
properties.push(o[k]);
}
});
return properties;
}
console.log(getAllProperties(people, "score"));
答案 2 :(得分:0)
如果你想在people数组中得到每个对象的分数,你可以这样做:
for (var i = 0; i < people.length; i++) {
var person = people[i];
for (var key in person) {
for (score in person[key]) {
console.log(person[key][score])
}
}
}