JavaScript - 无法将字典值添加到数组中

时间:2015-02-13 19:07:47

标签: javascript arrays dictionary

让我们考虑以下代码

        var array = [];
        var obj =[{id: "xxxxx", name: "Friend name"}, {id: "xxxxx", name: "Friend name"}]
        for (x in obj){

            array.push(x.name)

        }

我最终得到的数组具有适当的长度,但是填充了空值。我把这个obj.name改成了随机字符串,一切都很好。值得一提的是,相应的代码涉及angular.js,我在迭代解析的json时遇到了这个问题。但即使我粘贴了这个名为“obj”的简单数组,问题仍然存在。

我提出问题必须是将字典值推入数组,对不对?如果是,那有什么不对?

提前致谢!

4 个答案:

答案 0 :(得分:4)

代码的问题在于代码

for (x in obj)

x将是obj中每个元素的索引,这意味着不是获取元素本身,而是获得obj.indexOf(element)。

在您的情况下,x将为0,1。因此x.name将是未定义的。

修改您的代码:

    var array = [];
    var obj =[{id: "xxxxx", name: "Friend name"}, {id: "xxxxx", name: "Friend name"}]
    for (x in obj){

        array.push(obj[x].name)

    }

你应该好好去。

答案 1 :(得分:3)

不要将for..in用于数组,请尝试此操作

for (var i = 0, len = obj.length; i < len; i++){
    array.push(obj[i].name)
}

在您的情况下,您尝试在name中获取x,但x是属性名称而不是对象。

答案 2 :(得分:2)

您需要使用obj[x].name代替x.name。在这种情况下,x只是一个索引。 obj[x]将返回索引为x的项目,即obj[0]obj[1]

x.name基本上是0.name,这没有用。

答案 3 :(得分:1)

对于javascript词典,我通常只使用特别组织的对象。由于字典每个键只应有一个条目,因此我将键分配给对象 property 。 Javascript包含bracket notation来获取属性。

很酷的是,你可以使用属性分配新属性和“索引”:

var dictionary= {};
var obj =[{id: "id1", name: "Friend name"}, {id: "id2", name: "Friend name"}]
obj.forEach(function (o) {
    dictionary[o.id] = o; //adds more properties whose label are unique ids
}

要从字典中提取,您可以使用键(id)“索引”。

var id = "id1";
var person = dictionary[id];  //is {id: "id1", name: "Friend name"}

您仍然可以通过遍历其属性来遍历字典。