[英]What is the fastest way to check whether a specific UserID exists in the array using Jquery or Javascript
我有一個對象數組gAllMedicalFilesClaimantsArray
有2個屬性(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條記錄?
謝謝
我相信這樣的事情:
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 Web上的二進制搜索的, 在這里 。 如果網站死了,這是代碼:
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;
}
var match = '222';
var matches = $.grep(myArray, function(el, index) {
return (el.UserID === match);
});
如果對數組進行排序(例如,相對於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);
ExistsInArray(value, array){
for(var item in array){
if(item.UserId == value){
return true;
}
}
return false;
}
您可以將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');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.