我已经按照以下方式对数组中的对象进行了搜索。 这个问题已被无数次问过,但我想通过以下方式了解哪一个最好。如果还有另一个我也想知道。
使用$.grep()
function is_in_array(arr,element){
var result = $.grep(arr, function(e){ return e.id == element; });
return result.length;
}
上面的函数返回数组的长度。
使用查找对象
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);
.
.
.
答案 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
答案 1 :(得分:1)