以下两种方案中哪一种表现更好,并且感觉更自然:
-
使用对象文本:
var object = { 'key1': [e1, e2, e3, e4, .., en], 'key2': [e1, e2, e3, e4, .., en], 'key3': [e1, e2, e3, e4, .., en], ..., 'keyn': [e1, e2, e3, e4, .., en] }
-
使用二维数组(在二维上具有唯一的第一元素)
var array = [ ['key1', [e1, e2, e3, e4, .., en], ['key2', [e1, e2, e3, e4, .., en], ['key3', [e1, e2, e3, e4, .., en], ..., ['keyn', [e1, e2, e3, e4, .., en] ];
如果数据结构的主要目的是对key1,key2,key3,..,keyn进行纯迭代,并对每个e1,e2,e3,..,en执行一些操作。
注意:不确定是否相关,但这两个结构在初始化期间没有按原样定义。 在需要迭代和处理之前,object[key] = [e1, ..];
和array.push([key, [e1, ..]);
在整个系统中使用。
编辑:在整个应用程序中,我需要访问数组([e1, e2, .., en]
)以向其推送更多元素。当然,我需要通过字符串键来做。
所以我想它有两部分,添加元素并迭代它们。
数组会稍微快一些,但不会在任何明显的程度上,迭代它们中的每一个本质上是相同的。
数组迭代
for(var i in array){//i is the index of the array
keyName = array[i][0];
arrayOfValues = array[i][1];
}
对象迭代
for(var i in object){//i is the keyname
key = i;
arrayOfValues = object[i];
}
但是,如果您使用 keyid 查找并附加到内部数组,我会使用该对象。
在数组中按键 ID 查找
var keyId = "key123456";
var arrayOfValues=null;
for(var i in array){
if(array[i][0] == keyId){
arrayOfValues = array[i][1];
break;
}
}
在对象中按键 ID 查找
var keyId = "key123456"
var arrayOfValues = object[keyId]
使用对象文字,因为您不需要初始化更多数组,因此性能可能会更好,但这取决于您做事的方式。
如果要声明数组,则可以声明同一数组中的所有元素,其中声明自身名称的元素位于该数组中,因此跳过第一个索引(0)来迭代数组。想法:
var array = [
['key1', 1, 2, 3, 4, 9],
['key2', 1, 2, 3, 4, 9],
['key3', 1, 2, 3, 4, 9],
['keyn', 1, 2, 3, 4, 9]
];
for(var i = 0, el; el = array[i]; i ++) {
for(var b = 1, len = el.length; b < len; b ++) {
console.log(el[b]);
}
}
我认为这几乎与声明对象相同,但是数组除了具有Object
构造函数外,它们还具有Array
构造函数,然后我"相信"对于性能来说,它比声明对象文字要慢得多。