Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用对象数组作为基于属性名的查找表_Javascript_Arrays_Lookup Tables - Fatal编程技术网

Javascript 如何使用对象数组作为基于属性名的查找表

Javascript 如何使用对象数组作为基于属性名的查找表,javascript,arrays,lookup-tables,Javascript,Arrays,Lookup Tables,从 我有以下几种有效方法: var data = [ { "Key": "2222-2222-2222", "Email": "a@test.com" }, { "Key": "1111-1111-1111", "Email": "test@test.com" } ], lookup = {}; // generate


我有以下几种有效方法:

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 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)

var var1Val=list[uniqueID].var1
或
对于(变量i=0;i
我试图比较使用属性名作为查找表的键与使用循环的性能,因为数组可以有1000个元素,每秒可以访问1000次

编辑: 在Adrian Brand和CertainPerformance的答案的支持下进行了更多的研究之后,很明显我试图使用一个实际的数组创建一个关联数组,而javascript不支持这个数组。似乎可以添加命名的arrray元素,但不能通过名称访问它们,只能通过整数访问。(当心,我相信我读过这篇文章会导致意外状态)

如下图所示,唯一的选择是使用普通对象。令人惊讶的是,它的性能非常好

关于“未定义”的帖子也很有趣:


希望我能同时选择Adrian Brand和CertainPerformance answers,因为它们都非常有帮助。

现在,您正在将一个具有单个
uniqueID
属性的对象推送到数组中
list[someUniqueId]
不起作用,因为
uniqueID
将是数组中某个项的属性,而不是数组本身。只需使用对象即可:

var listObj = {};
for(someCount){
  var uniqueID = uuidv4();
  listObj[uniqueID] = {
    var1: 1,
    var2: 2,
  };
}
然后你就可以用

var var1Val = list[uniqueID].var1
如果您有总是从(即,
uniqueID
s)访问属性的标记,那么最好不要在代码中的任何位置使用数组

还有,检查的正确方法是什么:

if(list[uniqueID] === undefind)

只需更改为
未定义
,就可以了。

更新了OP,未定义是一个打字错误。谢谢你定制的例子,在我学习JS的过程中帮助了我很多。如果我的代表足够高,我会投赞成票。你接受的答案不正确。比较
.find
所需的时间与属性查找所需的时间,属性查找要快得多。
if(list[uniqueID] === undefind)