Javascript 三维数组 vs 对象字面量
Javascript three dimensional arrays vs Object literal
以下两种情况中,哪种表现更好,感觉更自然:
使用对象文字:
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 执行一些操作。
注意:不确定是否相关,但这 2 个结构在初始化期间未按原样定义。 object[key] = [e1, ..];
和array.push([key, [e1, ..]);
整个系统都在使用,才需要迭代处理。
编辑:
在整个应用程序中,我将需要访问数组 ([e1, e2, .., en]
) 以向其推送更多元素。当然,我需要通过字符串键来完成。
所以我猜它有两个部分,添加元素,并迭代它们。
Array 在这种情况下会稍微快一些,但不会达到任何明显的程度,迭代其中的每一个基本上是相同的。
数组迭代
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 查找并追加到内部数组,我会使用该对象。
通过数组中的keyid查找
var keyId = "key123456";
var arrayOfValues=null;
for(var i in array){
if(array[i][0] == keyId){
arrayOfValues = array[i][1];
break;
}
}
通过对象中的keyid查找
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
构造函数,那么我 "believe" 它会对于性能而言比声明对象文字更慢。
以下两种情况中,哪种表现更好,感觉更自然:
使用对象文字:
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 执行一些操作。
注意:不确定是否相关,但这 2 个结构在初始化期间未按原样定义。 object[key] = [e1, ..];
和array.push([key, [e1, ..]);
整个系统都在使用,才需要迭代处理。
编辑:
在整个应用程序中,我将需要访问数组 ([e1, e2, .., en]
) 以向其推送更多元素。当然,我需要通过字符串键来完成。
所以我猜它有两个部分,添加元素,并迭代它们。
Array 在这种情况下会稍微快一些,但不会达到任何明显的程度,迭代其中的每一个基本上是相同的。
数组迭代
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 查找并追加到内部数组,我会使用该对象。
通过数组中的keyid查找
var keyId = "key123456";
var arrayOfValues=null;
for(var i in array){
if(array[i][0] == keyId){
arrayOfValues = array[i][1];
break;
}
}
通过对象中的keyid查找
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
构造函数,那么我 "believe" 它会对于性能而言比声明对象文字更慢。