如何在javascript中存储复杂对象?

时间:2010-04-26 03:18:56

标签: javascript

我需要能够在javascript中存储对象,并且可以非常快速地访问它们。例如,我有一个车辆清单,定义如下:

{ "name": "Jim's Ford Focus", "color": "white", isDamaged: true, wheels: 4 }
{ "name": "Bob's Suzuki Swift", "color": "green", isDamaged: false, wheels: 4 }
{ "name": "Alex's Harley Davidson", "color": "black", isDamaged: false, wheels: 2 }

这些车辆可能会有数百个,可能会被访问​​数千次。我需要能够尽可能快地访问它们,理想情况是以一些有用的方式。

例如,我可以将对象存储在数组中。然后我可以简单地说vehicles[0]来获得福特福克斯的参赛作品,vehicles[1]来获得铃木雨燕等等。但是,我怎么知道福特福克斯哪个参赛作品?

我想简单地问“找到吉姆的福特福克斯”并尽快将对象归还给我。例如,在另一种语言中,我可能会使用按名称索引的哈希表。我怎么能用javascript做到这一点?或者,有更好的方法吗?

感谢。

4 个答案:

答案 0 :(得分:4)

Javascript对象可以用作哈希表:

var nameIndex = {};

for (var i = 0; i < cars.length; i++)
    nameIndex[cars[i].name] = cars[i];

//Later:
var someName = "Jim's Ford Focus";
var car = nameIndex[someName];

答案 1 :(得分:3)

正如Rabbott所说,JSON对象可以像哈希一样使用。

尝试这样的方法来存储您的数据:

vehicles = {
  "Jim's Ford Focus": { "color": "white", "isDamaged": true, "wheels": 4 },
  "Bob's Suzuki Swift": { "color": "green", "isDamaged": false, "wheels": 4 },
  "Alex's Harley Davidson": { "color": "black", "isDamaged": false, "wheels": 2 }
};
document.write(vehicles["Jim's Ford Focus"]["color"]);

这实际上与SLaks建议的表示几乎相同,但“名称”只是作为键存储而不是在值中重复。

作为一个说明,我认为将密钥表示为字符串就像我上面所做的那样更合适("isDamaged"而不是isDamaged)。

答案 2 :(得分:1)

你所展示的是一个javascript对象,对象只是哈希.. JSON(JavaScript Object Notation),签出http://www.json.org/example.html

答案 3 :(得分:1)

另一个有趣的方法是构建一个通用的索引函数。此函数将接受一个对象数组和一个键字段名称。它将每个记录存储在一个数组中,该数组存储在传入的键字段名称中的对象中。

代码如下:

var cars = [
  { "name": "Jim's Ford Focus",       "color": "white", "isDamaged": true,  "wheels": 4 },
  { "name": "Bob's Suzuki Swift",     "color": "green", "isDamaged": false, "wheels": 4 },
  { "name": "Alex's Harley Davidson", "color": "black", "isDamaged": false, "wheels": 2 }
];

function buildIndex(items, key) {
  var index = {},
      idx,
      item;
  for (idx in items) {
    item = items[idx];
    if(index[items[idx][key]] === undefined) {
      index[items[idx][key]] = [item];
    } else {
      index[items[idx][key]].push(item);
    }
  }
  return index;
}

var indexedByWheels = buildIndex(cars, "wheels");

/*

indexedByWheels will be structured as:

{
  "4": [
    { "name": "Jim's Ford Focus",       "color": "white", "isDamaged": true,  "wheels": 4 },
    { "name": "Bob's Suzuki Swift",     "color": "green", "isDamaged": false, "wheels": 4 }
  ],
  "2": [
    { "name": "Alex's Harley Davidson", "color": "black", "isDamaged": false, "wheels": 2 }
  ]
];

*/

for (var v in indexedByWheels) {
  print("Wheels " + v)  ;
  for (var i in indexedByWheels[v]) {
    print("  Car: " + indexedByWheels[v][i].name);
  }
}