我有一个包含2个属性的对象数组gAllMedicalFilesClaimantsArray
(UserID& UserInfo)
例如:
gAllMedicalFilesClaimantsArray[0].UserID = "111";
gAllMedicalFilesClaimantsArray[0].UserInfo = "AAA-111";
gAllMedicalFilesClaimantsArray[1].UserID = "222";
gAllMedicalFilesClaimantsArray[1].UserInfo = "BDD-478333";
使用Jquery或Javascript检查数组中是否存在特定UserID的最快方法是什么,因为gAllMedicalFilesClaimantsArray
有8000条记录?
由于
答案 0 :(得分:1)
这样的事情,我相信:
function exists(uid) {
var k = gAllMedicalFilesClaimantsArray.length;
uid = uid.toString(); // ensure the arg is a str (this can be omitted)
while (k--) {
if (gAllMedicalFilesClaimantsArray[k].UserID === uid) {
return true;
}
}
return false;
}
数组是否按UserID排序?如果是这样,可以通过二进制搜索进一步改进;这将把它从O(n)改为O(log n)。你的例子表明它是。我在网上用JavaScript here找到了一个很好的二进制搜索实现方法。如果网站死了,这是代码:
function binarySearch(items, value){
var startIndex = 0,
stopIndex = items.length - 1,
middle = Math.floor((stopIndex + startIndex)/2);
while(items[middle] != value && startIndex < stopIndex){
//adjust search area
if (value < items[middle]){
stopIndex = middle - 1;
} else if (value > items[middle]){
startIndex = middle + 1;
}
//recalculate middle
middle = Math.floor((stopIndex + startIndex)/2);
}
//make sure it's the right value
return (items[middle] != value) ? -1 : middle;
}
答案 1 :(得分:1)
var match = '222';
var matches = $.grep(myArray, function(el, index) {
return (el.UserID === match);
});
答案 2 :(得分:1)
如果数组已排序(例如,相对于UserId),您可以使用二进制搜索算法来固定搜索过程。
function binarySearch(array, userid) {
var low = 0, high = array.length - 1,
i, comparison;
while (low <= high) {
i = parseInt((low + high) / 2, 10);
if (array[i].UserId < userid) { low = i + 1; continue; };
if (array[i].UserId > userid) { high = i - 1; continue; };
return array[i];
}
return null;
};
您可以使用以下功能找到ID为12的用户:
var result = binarySearch(gAllMedicalFilesClaimantsArray, 12);
答案 3 :(得分:0)
ExistsInArray(value, array){
for(var item in array){
if(item.UserId == value){
return true;
}
}
return false;
}
答案 4 :(得分:-1)
您可以将Array对象原型化,如下所示:
Array.prototype.exists = function(value, prop){
var i = null;
for (i in this)
if (this[i][prop] && this[i][prop] == value)
return true;
return false;
}
gAllMedicalFilesClaimantsArray.exists('222', 'UserID');