Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 - Fatal编程技术网

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
};