How to Check if A Value exists in Array Jquery
我有以下场景,其中我的参数数组包含两个数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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, }); }); |
参数字典如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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。可能有什么问题。这里我想要的是,如果类别还没有出现,那么它应该添加到相应的品牌对象中。如果存在,那么它就不应该出现。同样,不应该出现两个品牌。
因为你不只是推
为此,您需要循环遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $.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 }); |
简单解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 } }); |
参考::此链接