【问题标题】:How to Check if A Value exists in Array Jquery如何检查数组Jquery中是否存在值
【发布时间】:2016-06-13 13:14:43
【问题描述】:

我有以下场景,其中我的参数数组包含两个数组

 <script>
  var parameter = [];
  var brand;
  var category = [];

$(function() {
    $('#brand_category').click(function(event){
      var newhtml="";
      var Html = "";
      var cat_li = "";
      var $table = $('table#tablerow')
      var added = "";

      if($('input[name=brand]:checked').length<=0)
        {
         alert("Please Select brand")

        }

      if($('input[name=category]:checked').length<=0) {

        alert("Please Select Category")
      }

      else {
        cat = $("input:checkbox[name=category]:checked").map(function() {
        return this.value;
        }).get();


        br = $("input[type='radio']:checked").map(function() {
        return this.value;
        }).get();

        var found = jQuery.inArray(br, parameter);
        console.log(found)

        parameter.push({
          brand :   br,
          category: cat,
        });
 });

</script>

参数字典如下所示

Array[2]
0: Object
brand: Array[1]
0: "spykar"
length: 1
__proto__: Array[0]
category: Array[1]
0: "Men Jeans"
length: 1
__proto__: Array[0]
__proto__: Object
1: Object
brand: Array[1]
0: "Madame"
length: 1
__proto__: Array[0]
category: Array[1]
__proto__: Object
length: 2
__proto__: Array[0]

如果值不存在,我想推送到参数,如果它存在,那么它不应该推送。我尝试使用 inArray(),但它总是返回 -1。可能是什么问题。 我想要的是,如果该类别尚不存在,那么它应该添加到相应的品牌对象中。如果存在,那么它不应该。类似地,不应该存在两个品牌

【问题讨论】:

  • 您只想同时检查品牌或类别?
  • 我想要的是,如果该类别不存在,那么它应该添加到相应的品牌对象。如果存在,那么它不应该。类似地,不应该存在两个品牌

标签: jquery arrays


【解决方案1】:

因为您不只是推送br 的值,而是将brcat 的值作为对象推送,所以您无法使用inArray() 直接比较它们

为此,您需要遍历parameter 并根据br 测试其中每个对象的值

var found = -1;
for (i=0;i<parameter.length;i++){
    if (parameter[i].brand == br) {
        found = i;
    }
}

if (found < 0){
    parameter.push({
        brand: br, 
        category: cat
    });
}

【讨论】:

  • 第一个if条件无法进入
【解决方案2】:

我在阅读了一些答案后尝试了这个解决方案

$.map(parameter, function(elementOfArray, indexInArray) {
      for (var key in elementOfArray.brand) {
        if (elementOfArray.brand.hasOwnProperty(key)) {
              if (elementOfArray.brand[key] == br) {
                added = true
           }
        }
      }
    });
    console.log(added);

    if (!added) {
      parameter.push({
      brand :  br,
      category: cat
    });

【讨论】:

    【解决方案3】:

    简单的解决方案::

    var parameter = [];
    
        cat = $("input:checkbox[name=category]:checked").map(function() {
        return this.value;
        }).get();
    
    
        br = $("input[type='radio']:checked").map(function() {
        return this.value;
        }).get();
    
    $.map(parameter, function(elementOfArray, indexInArray) {
    
      if (elementOfArray.brand == br) {
       console.log('true');//do what you need on found
    
       parameter.push({
              brand :   br,
              category: cat
            });
    
     }else{
       console.log('false');//do what you need on not found
     }
    });
    

    参考::this link

    【讨论】:

    • 你是在检查数据之前推送数据
    • if条件不匹配...检查上面
    • 我刚刚告诉你检查和推送的逻辑......来吧,我已经按照你说的修改了,请检查。
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2011-06-30
    • 2011-01-27
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多