【发布时间】:2017-01-17 01:34:34
【问题描述】:
我经常会发现自己必须从一个由任意索引索引的对象或对象数组中访问特定对象,但我需要的对象是键与特定值匹配的对象。
例如:
var cars = [
{ id:23, make:'honda', color: 'green' },
{ id:36, make:'acura', color:'silver' },
{ id:18, make:'ford', color:'blue' },
{ id:62, make:'ford', color:'green' },
];
假设我需要这些条目之一,并且我知道这个条目是唯一的;例如 id=18 的那个。
现在,我通过以下方式执行此操作:
function select(key,val,arr){
for(var i in arr){
if(arr[i][key]==val) return(arr[i]);
}
return(null); // object not present in arr
}
var id = 18;
var car = select('id', id, cars);
// car = { id:18, make:'ford', color:'blue' }
但这似乎很麻烦,并且随着性能的变化而难以扩展。来自大型数据集的值可能会很快返回,如果它靠近数组的开头,或者在最坏的情况下,将需要与条目一样多的迭代。 如果该值根本不存在,这似乎也非常浪费,因为您刚刚迭代所有对象只是为了得出一个空结果。
当搜索条件与主题键的参数不同时,是否有更优雅的方式在数组或对象中搜索值?
【问题讨论】:
-
不要在
array上使用for ... in
标签: javascript arrays json object array-algorithms