0

Какой из следующих двух сценариев работает лучше и чувствует себя более естественно для LANGAUGE:Javascript три одномерные массивы против литерал объекта

  1. Использование Object буквальное:

    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. Используя 2 одномерный массив (с уникальным 1-м элементом на втором измерении)

    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] 
    ]; 
    

Если основной целью структуры данных является чистая итерация по ключевым словам1, key2, key3, .., keyn и выполнение некоторых действий для каждого e1, e2, e3, .., en.

Примечание: не обязательно, если это уместно, но эти 2 структуры не определены как есть во время инициализации. object[key] = [e1, ..]; и array.push([key, [e1, ..]); используются по всей системе до начала итерации и обработки.

Edit: На протяжении всего приложения, я буду нуждаться получить доступ к массиву ([e1, e2, .., en]), чтобы подтолкнуть больше элементов к нему. Разумеется, мне нужно будет выполнить строковый ключ.

Итак, я думаю, что есть две части, добавляя элементы и итерации по ним.

+2

Вопрос в том, нужен ли вам доступ к элементам с помощью строкового ключа или нет. Массивы и хеш-таблицы имеют различную алгоритмическую сложность для разных задач, одна из них не «быстрее» или «более естественна», в общем, чем другая. Основываясь на вашем описании, я бы пошел с массивами. –

+1

Производительность разумная для известных ключей, я бы взял объектную версию. если вам нужно выполнить итерацию по всем элементам, а затем взять версию массива. –

+0

@NinaScholz Они прямо заявили * «Основная цель структуры данных - чистая итерация по ключевым словам1, key2, key3, .., keyn и выполнение некоторых действий для каждого e1, e2, e3, .., en." *. Поэтому они могут захотеть пойти с версией массива, но разница между ними довольно мала. Этот вопрос больше основан на мнениях. –

ответ

1

В этом контексте массив будет немного быстрее, но не в какой-либо заметной степени, итерация по каждому из них будет по существу одинаковой.

Массив итерация

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 в массиве

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

Это лучше использовать объект Li потому что вам не нужно будет инициализировать больше массивов, поэтому производительность может быть лучше, но это зависит от того, как вы делаете вещи.

Если вы хотите объявить массив, вы можете объявить все элементы в том же массиве, где находится элемент, объявляющий имя самого себя, поэтому вы пропустите первый индекс (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 конструктор, то я «верю», что было бы более медленным для performane чем объявление объектного литерала.

Смежные вопросы