我正在从db中获取数据,并将其存储在键值对中的数组中,这样我就可以如下获取各个键的值
var test = [];
for () //fetching and storing from db
{
test[key_array[i]] = "value i";
.
.
.
}
test["id_1"] = "value 1"; //to get the value of id_<number>
我们也可以通过对象来达到这一目的。我想知道如果我们想要一个快速,优化的代码,哪个是更好的选择
答案 0 :(得分:2)
数组是否比在javascript中存储和搜索键值对的对象好?
不。实际上,您不是将数组用作数组,而是将其用作对象。您可以从字面上更改
var test = [];
到
var test = {};
// or
var test = Object.create(null); // To avoid it having a prototype
它会做与您现在看到的相同的事情:
var test = {};
test["id_1"] = "value_1";
console.log(test["id_1"]);
var test2 = Object.create(null);
test2["id_2"] = "value_2";
console.log(test2["id_2"]);
(而且您应该更改它,因为仅将数组用于其对象功能会使维护代码的人感到困惑。)
[]
是一个属性访问器,它接受属性名称作为字符串。 (我们也将其与使用数字的标准数组一起使用,但理论上它们会在查找属性之前转换为字符串,因为标准数组aren't really arrays at all¹。)
当然,在ES2015 +中,您可能会使用Map
而不是对象:
const test = new Map();
test.set("id_1", "value_1");
console.log(test.get("id_1"));
¹这是我贫乏的小博客上的帖子。
答案 1 :(得分:0)
数组只是一种专门用于存储事物序列的对象。如果您评估typeof [],它将产生“对象”。
https://eloquentjavascript.net/04_data.html#h_cqg63Sxe3o
数组的概念是存储具有相同类型或逻辑结构的数据序列。因此,逻辑上是将数据从db放入数组。
答案 2 :(得分:0)
请注意,您应该避免这种情况,因为它会变得非常混乱:
var test = [];
test["id_1"] = "value_1";
test[-1] = "value_0";
console.log(test[-1],test["id_1"]);
console.log(test.length,Array.isArray(test));
它使您认为test
是一个数组(确实是),但是test[-1]
和test["id_1"]
不是该数组的一部分(这就是Array.isArray(test)
返回{{ 1}},但true
仍然等于0。请参阅有关TJ Crowder先生提供的链接的说明