开发者

What is the fastest way to check whether a specific UserID exists in the array using Jquery or Javascript

开发者 https://www.devze.com 2023-02-17 12:11 出处:网络
I have an array of objects gAllMedicalFilesClaimantsArray with 2 properties开发者_JAVA百科 (UserID & UserInfo)

I have an array of objects gAllMedicalFilesClaimantsArray with 2 properties开发者_JAVA百科 (UserID & UserInfo)

For example:

gAllMedicalFilesClaimantsArray[0].UserID = "111"; 
gAllMedicalFilesClaimantsArray[0].UserInfo = "AAA-111";
gAllMedicalFilesClaimantsArray[1].UserID = "222"; 
gAllMedicalFilesClaimantsArray[1].UserInfo = "BDD-478333";

What is the fastest way to check whether a specific UserID exists in the array using Jquery or Javascript because gAllMedicalFilesClaimantsArray has got 8000 records?

Thanks


var match = '222';
var matches = $.grep(myArray, function(el, index) {
   return (el.UserID === match);
});


You can fasten the search process by using Binary Search algorithm if the array is sorted (e.g with respect to 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;
};

You can find the user of which ID is 12 by using the function:

var result = binarySearch(gAllMedicalFilesClaimantsArray, 12);


Something like this, I believe:

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;
}

Is the array sorted by the UserID? If so, it can be improved either further by using a binary search; that would change this from O(n) to O(log n). Your example suggests it is. I found a good implementation of a binary search in JavaScript on the web, here. Here is the code if the site ever dies:

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;
}


ExistsInArray(value, array){
    for(var item in array){
        if(item.UserId == value){
            return true;
        }
    }
    return false;
}


You can either prototype Array object, like this:

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');
0

精彩评论

暂无评论...
验证码 换一张
取 消