Javascript 三维数组 vs 对象字面量

Javascript three dimensional arrays vs Object literal

以下两种情况中,哪种表现更好,感觉更自然:

  1. 使用对象文字:

    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]
    }
    
  2. 使用二维数组(第一个元素在第二个维度上是唯一的)

    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" 它会对于性能而言比声明对象文字更慢。