Javascript数组作为对象

时间:2012-12-04 20:37:13

标签: javascript arrays

  

可能重复:
  Length of Javascript Object (ie. Associative Array)
  Loop through JavaScript object

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 个答案:

答案 0 :(得分: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" }
];

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

答案 1 :(得分: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("];");

答案 2 :(得分:1)

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

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

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

产地:

Steve
Abigayle

但我认为其他答案之一可能是找到你想要的正确方法。

答案 3 :(得分:1)

你也可以loop通过对象键。仅当您需要索引键时,才应在此处使用数组

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

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

顺便说一句,locationwindow对象中的一个(几乎)保留的变量名。你无法真正覆盖它,所以你应该重命名该变量。


以上代码使用的Ecmascript 262第5版代码适用于所有现代浏览器。如果要支持旧版浏览器,则需要加载任何各种ES5填充程序库