我需要能够在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做到这一点?或者,有更好的方法吗?
感谢。
答案 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);
}
}