簡體   English   中英

使用Jquery或Javascript檢查數組中是否存在特定UserID的最快方法是什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM