Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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_Object - Fatal编程技术网

搜索javascript对象或对象数组最有效

搜索javascript对象或对象数组最有效,javascript,arrays,object,Javascript,Arrays,Object,我有一个JavaScript对象数组 var arrayObjs = [ { id:abc123, radius:5.0}, { id:def235, radius:2.5},...] 我一直在使用for循环来查找id=def235的特定对象,使用这样的对象会更有效吗 var objectObjs = { { abc123:{ id:abc123, radius:5.0}}, { def235:{ id:def235, radius:2.5}},...} 使用这样的对象会更有效吗 var o

我有一个JavaScript对象数组

var arrayObjs = [
{ id:abc123, radius:5.0},
{ id:def235, radius:2.5},...]
我一直在使用for循环来查找id=def235的特定对象,使用这样的对象会更有效吗

var objectObjs = {
{ abc123:{ id:abc123, radius:5.0}},
{ def235:{ id:def235, radius:2.5}},...}
使用这样的对象会更有效吗

var objectObjs = {
{ abc123:{ id:abc123, radius:5.0}},
{ def235:{ id:def235, radius:2.5}},...}
如果您通过
id
进行查找,几乎可以肯定,但是您的示例有一个额外的
{}
层,您需要删除:

var objectObjs = {
    abc123:{ id:abc123, radius:5.0},
    def235:{ id:def235, radius:2.5},
    //...
};
JavaScript对象针对按名称检索属性进行了高度优化

另一个选项是使用,它也针对按键检索进行了优化

如果您使用一个对象,最好通过创建它,这样它就不会继承
object.prototype
属性。您可能不会像查找字符串或值一样查找
id
,但仍然…:-)所以也许:

var objectObjs = Object.assign(Object.create(null), {
    abc123:{ id:abc123, radius:5.0},
    def235:{ id:def235, radius:2.5},
    //...
});
从数组中创建该对象也很简单,以避免两次键入
id
s,并避免导致以下错误的机会:

var arrayObjs = [
{ id:abc123, radius:5.0},
{ id:def235, radius:2.5},/*...*/];
var objectObjs = Object.create(null);
arrayObjs.forEach(entry => { objectObjs[entry.id] = entry; });

只是为了好玩,我试了一下:

当然,正如T.J.所描述的,通过对象属性进行访问要快得多。有趣的是,在
Chrome
上的差异比我刚刚尝试的
Firefox
上的差异要大得多。尝试运行Chrome和Firefox或Edge的测试

var arrayObjs = [
  { id:'abc123', radius:5.0},
  { id:'def235', radius:2.5}
];

for (var i = 0; i < arrayObjs.length; i++) {
  if (arrayObjs[i].id == 'def235') {
    // found it
    break;
  }
}

你为什么不测试一下呢?大多数绩效工作只是针对您的案例进行衡量。