【问题标题】:Jquery, checking if a value exists in array or not [duplicate]Jquery,检查数组中是否存在值[重复]
【发布时间】:2011-12-14 10:09:25
【问题描述】:

我相信对于那些玩过 java script / jquery 的人来说这个问题会相当容易。

var arr = new Array();

$.map(arr, function() {
 if (this.id == productID) {
   this.price = productPrice;
 }else {
  arr.push({id: productID, price: productPrice})
 }
}

我猜上面的代码以非常简单的方式解释了我想要的东西。我想这个 $.map 会像这样工作,但不幸的是我无法得到结果。

最简单、最优雅的方法是什么?我真的遍历所有数组只是为了查找键的值是否存在吗?

Jquery 有类似isset($array['key']) 的东西吗?

编辑

我尝试使用 inArray,但即使有匹配项,它也会不断将对象添加到数组中。

if ( $.inArray(productID, arr) > -1) {
   var number = $.inArray(productID, arr);
   orderInfo[number].price = parseFloat(productPrice);
}else {
   orderInfo.push({id:productID, price:parseFloat(productPrice)});
}

【问题讨论】:

  • $.inArray() 在大多数情况下都不起作用。最好使用jQuery.inArray()

标签: javascript jquery arrays loops


【解决方案1】:

http://api.jquery.com/jQuery.inArray/

if ($.inArray('example', myArray) != -1)
{
  // found it
}

【讨论】:

  • 太糟糕的社区投票不能在五年后导致被标记为正确答案。 :)
  • 他们应该通过在 x 时间后查看赞成票来自己标记正确答案
  • 其实$.inArray执行的是===而不是==。所以如果你这样做$.inArray( "4", [1,2,3,4]) 你会得到-1
【解决方案2】:

jQuery 有inArray 函数:

http://api.jquery.com/jQuery.inArray/

【讨论】:

  • 我尝试使用 inArray 但似乎我在某些时候做错了。它不断添加数据。
  • @Revenant,Here 就是一个例子。
【解决方案3】:
    if ($.inArray('yourElement', yourArray) > -1)
    {
        //yourElement in yourArray
        //code here

    }

参考:Jquery Array

$.inArray() 方法类似于 JavaScript 的原生 .indexOf() 方法,因为它在找不到匹配项时返回 -1。如果数组中的第一个元素与值匹配,则 $.inArray() 返回 0。

【讨论】:

  • 这就是我要找的,非常感谢酷酷的解决方案
【解决方案4】:

试试jQuery.inArray()

这是使用相同代码的jsfiddle linkhttp://jsfiddle.net/yrshaikh/SUKn2/

$.inArray() 方法类似于 JavaScript 的原生 .indexOf() 方法,因为它在找不到匹配项时返回 -1。如果数组中的第一个元素与值匹配,则 $.inArray() 返回 0

示例代码

<html>
   <head>
      <style>
         div { color:blue; }
         span { color:red; }
  </style>
      <script src="http://code.jquery.com/jquery-latest.js"></script>
   </head>
   <body>    
      <div>"John" found at <span></span></div>
      <div>4 found at <span></span></div>
      <div>"Karl" not found, so <span></span></div>
      <div>
         "Pete" is in the array, but not at or after index 2, so <span></span>
      </div>
      <script>
         var arr = [ 4, "Pete", 8, "John" ];
         var $spans = $("span");
         $spans.eq(0).text(jQuery.inArray("John", arr));
         $spans.eq(1).text(jQuery.inArray(4, arr));
         $spans.eq(2).text(jQuery.inArray("Karl", arr));
         $spans.eq(3).text(jQuery.inArray("Pete", arr, 2));
      </script>  
   </body>
</html>

输出:

“约翰”发现于 3 4 发现于 0 没有找到“Karl”,所以 -1 “Pete”在数组中,但不在索引 2 处或之后,所以 -1

【讨论】:

  • 这个答案应该是被接受的。对于现在的未来,使用jQuery.inArray() 而不是$.inArray()
【解决方案5】:

如果您想使用.map() 进行操作,或者只是想知道它是如何工作的,您可以这样做:

var added=false;
$.map(arr, function(elementOfArray, indexInArray) {
 if (elementOfArray.id == productID) {
   elementOfArray.price = productPrice;
   added = true;
 }
}
if (!added) {
  arr.push({id: productID, price: productPrice})
}

该函数分别处理每个元素。其他答案中提出的.inArray() 可能是更有效的方法。

【讨论】:

  • 只有 1 个额外信息; added = true 必须在条件内。
猜你喜欢
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 2015-04-12
  • 2016-08-28
相关资源
最近更新 更多