Javascript 按对象值选择数组索引
如果我有这样一个数组:Javascript 按对象值选择数组索引,javascript,arrays,Javascript,Arrays,如果我有这样一个数组: var array = [{ID:1,value:'test1'}, {ID:3,value:'test3'}, {ID:2,value:'test2'}] function arrayObjectIndexOf(myArray, property, searchTerm) { for (var i = 0, len = myArray.length; i < len; i++) { if
var array = [{ID:1,value:'test1'},
{ID:3,value:'test3'},
{ID:2,value:'test2'}]
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;
}
我想按ID选择一个索引
i、 我想以某种方式选择ID:3,并获取{ID:3,value:'test3'}
最快和最轻量级的方法是什么?使用:
它返回一个数组,因此要获取对象本身,您需要[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);
通过,您可以使用“查找并拾取”样式输入:
_.find(result, {ID: 3})
我会选择这样的方式:
var array = [{ID:1,value:'test1'},
{ID:3,value:'test3'},
{ID:2,value:'test2'}]
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;
}
使用filter并不是最快的方法,因为filter将始终遍历整个数组,即使要搜索的元素是第一个元素。这可能会在较大的阵列上表现不佳 如果您正在寻找最快的方法,那么简单地循环直到找到元素可能是最好的选择。像下面这样
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);
它允许您
var index=indexBy(数组,“ID”)代码>到目前为止您尝试了什么?结果如何?我在试验for循环。可能是@nachoalvarez的重复,您的代码会出错。您应该使用[property]而不是.property
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);
var indexBy = function(array, property) {
var results = {};
(array||[]).forEach(function(object) {
results[object[property]] = object;
});
return results
};