在JavaScript中存储键=>值数组的最佳方法?

什么是最好的方式来存储一个key=>value数组在JavaScript中,以及如何可以循环?

每个元素的关键字应该是一个标签,例如{id}或者只是id ,值应该是id的数字值。

它应该是现有的JavaScript类的元素,或者是一个可以很容易地通过类引用的全局variables。

jQuery可以使用。

这正是一个JavaScript对象:

 var myArray = {id1: 100, id2: 200, "tag with spaces": 300}; myArray.id3 = 400; myArray["id4"] = 500; 

你可以循环使用for..in循环 :

 for (var key in myArray) { console.log("key " + key + " has value " + myArray[key]); } 

另请参阅: 使用对象 (MDN)。

在ECMAScript6中还有Map (请参阅那里的浏览器兼容性表):

  • 一个对象有一个原型,所以在地图上有默认的键。 这可以通过自ES5使用map = Object.create(null)来绕过,但很less完成。

  • 对象的关键字是string和符号,它们可以是Map的任何值。

  • 您可以轻松获取地图的大小,而您必须手动跟踪对象的大小。

如果我正确理解你的话

 var hash = {}; hash['bob'] = 123; hash['joe'] = 456; var sum = 0; for (var name in hash) { sum += hash[name]; } alert(sum); // 579 

在JavaScript中,键值数组存储为对象。 有这样的东西在JavaScript中的数组,但他们也有些考虑对象,检查这家伙的答案 – 数组和对象之间的区别是什么?

通常使用方括号语法和使用大括号语法的对象(“key => value”数组),虽然可以使用方括号语法访问和设置对象属性,如Alexey Romanov所示。

javascript中的数组通常只用于数字自动增加的键,但javascript对象可以保存键值对,函数甚至其他对象。

简单的数组例如。

 $(document).ready(function(){ var countries = ['Canada','Us','France','Italy']; console.log('I am from '+countries[0]); $.each(countries, function(key, value) { console.log(key, value); }); }); 

输出 –

0“加拿大”

1“我们”

2“法国”

3“意大利”

我们在上面看到,我们可以使用jQuery.each函数循环一个数值数组,并使用方括号和数字键访问循环以外的信息。

简单对象(json)

 $(document).ready(function(){ var person = { name: "James", occupation: "programmer", height: { feet: 6, inches: 1 }, } console.log("My name is "+person.name+" and I am a "+person.height.feet+" ft "+person.height.inches+" "+person.occupation); $.each(person, function(key, value) { console.log(key, value); }); }); 

输出 –

我叫詹姆斯,我是一个6英尺1的程序员

詹姆斯姓

职业程序员

高度对象{feet:6,inches:1}

在像php这样的语言中,这将被视为具有键值对的multidimensional array,或者数组中的数组。 我假设,因为你问如何循环通过一个键值数组,你会想知道如何获得一个对象(键=>值数组)像上面的人物件,让我们说,不止一个人。

那么,现在我们知道javascript数组通常用于数字索引和更灵活的关联索引对象,我们将一起使用它们来创build一个可以循环的对象数组,

JSON数组(对象数组) –

 $(document).ready(function(){ var people = [ { name: "James", occupation: "programmer", height: { feet: 6, inches: 1 } }, { name: "Peter", occupation: "designer", height: { feet: 4, inches: 10 } }, { name: "Joshua", occupation: "CEO", height: { feet: 5, inches: 11 } } ]; console.log("My name is "+people[2].name+" and I am a "+people[2].height.feet+" ft "+people[2].height.inches+" "+people[2].occupation+"\n"); $.each(people, function(key, person) { console.log("My name is "+person.name+" and I am a "+person.height.feet+" ft "+person.height.inches+" "+person.occupation+"\n"); }); }); 

输出 –

我叫Joshua,我是一名5英尺11英寸的CEO

我叫詹姆斯,我是一个6英尺1的程序员

我的名字是彼得,我是一个4英尺10的devise师

我叫Joshua,我是一名5英尺11英寸的CEO

请注意,在循环外,我必须使用数字键的方括号语法,因为这是一个数字索引的对象数组,当然在循环内暗示数字键。