С https://codereview.stackexchange.com/questions/25858/json-lookup-by-key
У меня есть следующее, которое работает:
var data = [
{
"Key": "2222-2222-2222",
"Email": "a@test.com"
},
{
"Key": "1111-1111-1111",
"Email": "test@test.com"
}
],
lookup = {};
// generate the lookup table for reuse
data.forEach(function (el, i, arr) {
lookup[el.Key] = el.Email;
});
// returns 'test@test.com'
print(lookup['1111-1111-1111']);
То, что я хочу сделать (нажать работает, доступ не):
нажатие (проверка данных населения):
var list = [];
for(someCount){
var uniqueID = uuidv4();
var objToAdd = {};
var objChild = {};
objChild.var1 = 1;
objChild.var2 = 2;
objToAdd[uniqueID] = objChild;
list.push(objToAdd);
}
читать / доступ:
var var1Val = list[uniqueID].var1
or
for(var i = 0; i < list.length; i++){
if(list[i] === uniqueID){
var var1Val = list[i].var1
}
}
Also whats the proper way to check:
if(list[uniqueID] === undefined)
Я пытаюсь сравнить производительность использования имени свойства в качестве ключа для таблицы поиска, в отличие от цикла, поскольку массив может иметь 1000 элементов и доступ к ним 1000 раз в секунду.
Edit:
После небольшого исследования, основанного на ответах Адриана Брэнда и CertainPerformance, стало ясно, что я пытался создать ассоциативный массив с использованием фактического массива, который не поддерживается javascript. Кажется, что вы можете добавить именованные элементы массива, но вы не можете получить к ним доступ по имени, только по целому числу. (будьте осторожны, я думаю, что прочитав это приводит к неожиданным состояниям)
Как показано ниже, единственным вариантом является использование простого объекта. Удивительно очень производительно.
Также интересный пост на 'undefined': Обнаружение неопределенного свойства объекта
Жаль, что я не мог бы выбрать ответы как Adrian Brand, так и CertainPerformance, поскольку они оба очень помогли.