【问题标题】:javascript find if value is NOT IN arrayjavascript查找值是否不在数组中
【发布时间】:2011-09-26 08:37:21
【问题描述】:

我的问题是即使对于重复的条形码,循环也会继续进入 if 语句。我正在尝试仅为唯一条形码输入 if 语句,但在循环结束时 myArray 中有重复项......为什么?

var myArray = new Array();  var i = 0;
$("li.foo").each(function(){
   var iBarCode = $(this).attr('barcode');
   if( !( iBarCode in myArray ) ){
      myArray[i++] = iBarCode;
      //do something else
   }
});

【问题讨论】:

    标签: javascript jquery arrays each


    【解决方案1】:

    Jquery 有一个inArray() 函数。

    var myArray = new Array();  var i = 0;
    $("li.foo").each(function(){
       var iBarCode = $(this).attr('barcode');
       if( $.inArray(iBarCode, myArray) == -1 ){
          myArray[i++] = iBarCode;
          //do something else
       }
    });
    

    【讨论】:

    • 您的代码错误,如果元素位于位置 0,!($.inArray(iBarCode, myArray) 会失败。您应该改用!!~($.inArray(iBarCode, myArray)
    • 现在我的循环没有进入任何条形码的 if 语句! myArray 最后是空白的
    • sadmicrowave,我的 if 语句写错了,因为 inArray 如果找不到则返回 -1。我已经更新了答案。
    • 谢谢你修复它。只是好奇,但有没有办法检查一个值是否在没有 jquery 的数组中?像 indexOf() 什么的?
    • indexOf 在 IE 中不受支持。看到这个问题。 stackoverflow.com/questions/1744310/…
    【解决方案2】:

    in 关键字搜索属性,例如当您想知道一个对象是否有一些可用的方法时。由于您正在寻找值,它总是返回 false。

    您应该按照 Gazler 的建议使用数组搜索功能。

    【讨论】:

    • 如果不使用jquery,就使用if( myArray.indexOf(iBarCode) === -1 ){ // do something else }
    【解决方案3】:

    2021 年更新

    let myArray = [...new Set([...document.querySelectorAll('li.foo')].map(a => a.dataset.barcode))]
    

    向后工作:使用匹配元素中的spread syntax 创建一个数组,其中Map 只有data-barcode 属性。使用它来创建一个新的Set,然后从该集合中创建一个数组

    【讨论】:

      猜你喜欢
      • 2023-02-03
      • 2023-03-11
      • 2014-09-01
      • 2015-08-27
      • 2011-09-15
      • 1970-01-01
      • 2013-04-17
      • 2021-08-19
      相关资源
      最近更新 更多