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

JavaScript - Can't add dictionary value to an array

让我们考虑以下代码

        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" 的简单字典数组,问题仍然存在。

我认为问题一定出在将字典值压入数组,对吗?如果是,有什么问题吗?

提前致谢!

数组不要用for..in,试试这个

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

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

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

x.name基本上就是0.name,没有意义。

您的代码存在问题,在代码中

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)

    }

你应该可以开始了。

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

很酷的是,您可以分配新属性并 "index" 使用属性:

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
}

要从字典中提取,您可以 "index" 使用键 (id)。

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

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