-2

可能重复:
Javascript 对象的长度(即关联数组)
循环遍历 JavaScript 对象

var location = {
     "Steve": "New York",
     "Abigayle": "Chicago"
}

for (var i = 0; i < location .length; i++)
{
    console.log('works');
}

我正在尝试创建一个数组,其中每个项目都有一些名称和值。

上面的代码不起作用。试图制作一个对象,但它没有length属性 - 没有for循环。

location= {
     "Steve": "New York",
     "Abigayle": "Chicago"
};

在这种情况下可以使用数组吗?

4

4 回答 4

2

如果你只想用你所拥有的东西工作,

var location = {
     "Steve" : "New York",
     "Abigayle" : "Chicago"
}

for (var name in location) {
    console.log( name, location[name] );
}

如果您关心长度,请使用对象数组

var location = [
     { key : "Steve", value : "New York" },
     { key : "Abigayle", value : "Chicago" }
];

但是没有简单的方法来查找它,它需要一个循环。

于 2012-12-04T20:40:24.987 回答
1
var locations = [
     ["Steve","New York"]
    ,["Abigayle","Chicago"]
];

或者

var locations = [
      {Name:"Steve",Location:"New York"}
     ,{Name:"Abigayle",Location:"Chicago"}
];

您可以像这样在第一个选项中输出数据:

var delimiter = "    ";
console.log("var locations = [");
for (var i=0; i<locations.length; i++)
{
    var innerdelimiter = "";
    var line = delimiter + "[";   
    for (var j=0; j<locations[i].length;j++)
    {
       line += innerdelimter + locations[i][j];
       innerdelimiter = ",";
    }
    line += "]";
    console.log(line);
    delimiter = "   ,";
}
console.log("];");

和第二个选项中的数据如下:

var delimiter = "    ";
console.log("var locations = [");
for (var key in locations)
{
    console.log(delimiter + "{" + key + ":" + locations[key] + "}");
    delimiter = "   ,";
}
console.log("];");
于 2012-12-04T20:39:22.623 回答
1

仅供参考,您可以遍历对象中的所有键:

location = {
     "Steve": "New York",
     "Abigayle": "Chicago"
};

for (var elem in location) {
    console.log(elem);
}

产生:

Steve
Abigayle

但我认为其他答案之一可能是您正在寻找的正确方法。

于 2012-12-04T20:41:34.550 回答
1

您也可以loop覆盖对象键。只有当您需要索引键时,您才应该在此处使用数组

var loc = {
     "Steve": "New York",
     "Abigayle": "Chicago"
};

Object.keys( loc ).forEach(function( name ) {
    console.log('name: ', name, ' city: ', loc[ name ] );
});

顺便说一句,location是对象内的(几乎)保留变量名window。您不能真正覆盖它,因此您应该重新命名该变量。


上述代码使用适用于所有现代浏览器的 Ecmascript 262 第 5 版代码。如果您想支持旧版浏览器,您需要加载任何各种 ES5 shim 库

于 2012-12-04T20:42:59.473 回答