如何检查Array Jquery中是否存在值

时间:2016-03-01 07:59:08

标签: jquery arrays

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

 <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]

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

3 个答案:

答案 0 :(得分:1)

因为您不仅仅推动br的价值,而是将brcat的值作为对象,您可以&#39; t使用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
    });
}

答案 1 :(得分:0)

简单解决方案::

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

ref :: this link

答案 2 :(得分:0)

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

$.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
    });