检查数组中是否存在元素而不迭代它

我的阵列:

tempListArray = "[{"id":"12","value":false},{"id":"10","value":false},{"id":"9","value":false},{"id":"8","value":false}]";

要检查一个元素是否存在,我会这样做:

for (var i in tempListArray) {
    //check flag
    if (tempListArray[i].id == Id) {
        flagExistsLoop = 1;
        break;
    }
} 

无论如何,我可以检查Id是否存在,而不会循环遍历整个数组。 如果说我有100个元素,基本上我担心表现。

谢谢


不,如果没有使用自定义的字典对象(你真的不想这么做),没有比对所有对象进行“全面扫描”更快的方法。

作为一般的经验法则,不要担心任何语言或任何情况下的性能,直到迭代的总次数达到5位数,最常见的是6或7次。扫描包含100个元素的表最差应该是几毫秒。 在注意到性能影响之前担心性能影响是最糟糕的过早优化之一。


不,你不知道没有迭代数组。

但是,注意for...in循环中是迭代数组的不好方法:

  • 不保证它会按顺序迭代阵列
  • 它也会迭代(可枚举)非数字自己的属性
  • 它还会迭代(可枚举)来自原型的属性,即在Array.prototypeObject.protoype定义的Object.protoype
  • 我会使用其中的一个:

  • for以数字指标环:

    for (var i=0; i<tempListArray.length; ++i) {
        if (tempListArray[i].id == Id) {
            flagExistsLoop = 1;
            break;
        }
    } 
    
  • Array.prototype.some (EcmaScript 5):

    var flagExistsLoop = tempListArray.some(function(item) {
        return item.id == Id;
    });
    

    请注意,它可能比其他的更慢,因为它在每个步骤都调用一个函数。

  • for...of循环(EcmaScript 6):

    for (var item of tempListArray) {
        if (item.id == Id) {
            flagExistsLoop = 1;
            break;
        }
    } 
    

  • 尝试使用php.js它可以帮助,而你可以使用相同的PHP函数名称,它有一些有用的功能

    链接地址: http://www.djcxy.com/p/25683.html

    上一篇: Checking if element exists in array without iterating through it

    下一篇: Is there an inverse 'member?' method in ruby?