访问存储在数组中的未知名称对象中的值(JavaScript)

时间:2015-10-11 17:32:25

标签: javascript arrays object

很难给这个问题一个好名字。我会跳到示例中:

var people = [
        {
            john: {
                score: 1
            }
        },
            {
            adam: {
                score: 2
            }
        }
    ];

我需要遍历这个对象数组并获取score值,诀窍是我不知道名称(johnadam,...)但是我知道每个都包含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。

3 个答案:

答案 0 :(得分:2)

您可以使用 map() Object.keys() map() 将有助于迭代数组并且 Object.keys() 有助于将对象键作为数组获取,从数组中获取第一个并获取值。

&#13;
&#13;
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;
&#13;
&#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])
            }
    }
}