如果我有这样的数组:
var array = [{ID:1,value:'test1'},
{ID:3,value:'test3'},
{ID:2,value:'test2'}]
我想按ID选择一个索引。
即,我想以某种方式选择ID:3,并获得{ID:3,value:'test3'}
。
最快,最轻量级的方法是什么?
答案 0 :(得分:5)
使用array.filter
:
var results = array.filter(function(x) { return x.ID == 3 });
它返回一个数组,所以为了得到对象本身,你需要[0]
(如果你确定对象存在的话):
var result = array.filter(function(x) { return x.ID == 3 })[0];
或者某种辅助函数:
function getById(id) {
var results = array.filter(function(x) { return x.ID == id });
return (results.length > 0 ? results[0] : null);
}
var result = getById(3);
答案 1 :(得分:0)
使用lodash,你可以使用带有pluck风格输入的find:
_.find(result, {ID: 3})
答案 2 :(得分:0)
我会选择这样的事情:
function arrayObjectIndexOf(myArray, property, searchTerm) {
for (var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i].property === searchTerm)
return myArray[i];
}
return -1;
}
在你的情况下你应该这样做:
arrayObjectIndexOf(array, id, 3);
答案 3 :(得分:0)
使用过滤器不是最快的方法,因为即使要搜索的元素是第一个元素,过滤器也会一直遍历整个数组。这在较大的阵列上表现不佳。
如果您正在寻找最快的方法,只需循环直到找到元素可能是最佳选择。像下面的东西。
var findElement = function (array, inputId) {
for (var i = array.length - 1; i >= 0; i--) {
if (array[i].ID === inputId) {
return array[i];
}
}
};
findElement(array, 3);
答案 4 :(得分:0)
var indexBy = function(array, property) {
var results = {};
(array||[]).forEach(function(object) {
results[object[property]] = object;
});
return results
};
允许您var indexed = indexBy(array, "ID");