哪种方法最好在数组中搜索对象?

时间:2013-05-09 21:12:42

标签: javascript jquery arrays processing-efficiency

我已经按照以下方式对数组中的对象进行了搜索。 这个问题已被无数次问过,但我想通过以下方式了解哪一个最好。如果还有另一个我也想知道。

使用$.grep()

function is_in_array(arr,element){
    var result = $.grep(arr, function(e){ return e.id == element; });
    return result.length;
}

上面的函数返回数组的长度。

    元素不存在时
  • 0
  • 元素存在时
  • 1
  • 长度> 1如果存在更多具有相同值的元素

使用查找对象

var lookup = {};
for (var i = 0, len = array.length; i < len; i++) {
    lookup[array[i].id] = array[i];
}

这样我每次都不需要遍历整个数组。我只是检查lookup[id]

传统方式

for循环

function in_array(array, id) {
    for(var i=0;i<array.length;i++) {
        if(array[i].id === id) {
            return true;
        }
    }
    return false;
}

检查元素是否存在,我打电话给in_array(arr,element)

哪种方法最好?问题严重听起来重复,但我只是想确保哪一个最好只从这三个。

更新

数组将包含像

这样的对象
var arr = [];
var nameObj = {};

nameObj.label = "somename";
nameObj.id = 123;
arr.push(nameObj);
.
.
.

2 个答案:

答案 0 :(得分:2)

您还可以使用JSON(用于比较)和Array.filter方法的组合:

var findvalue = JSON.stringify([somevalue]),
    ,found = [array].filter(
               function(a){return JSON.stringify(a) === findvalue;}).length
;
// found > 0 means: findvalue found

jsfiddle示例
有关Array.filter的更多内容以及旧版浏览器的填充@MDN

答案 1 :(得分:1)

您可以使用内置的map()方法而不是循环:

var lookup=array.map(function(e){return e.id;});

(IE 8不支持)