从数组jquery中删除null元素

时间:2015-05-09 09:57:20

标签: javascript jquery arrays json

我有我喜欢的HTML

  <input  type="text" class="form-control PaperSupply">` 
  <input  type="text" class="form-control PaperSupply">`
 <input  type="text" class="form-control PaperConsum">
 <input  type="text" class="form-control PC">

相同价值论文供应和PaperConsum的多个输入, 在javascript我正在使用像这样的地图函数创建一个相同值的数组

 var paperSupply = $('.PaperSupply').map(function(){return $(this).val();}).get(); 
 var PaperConsum= $('.PaperConsum').map(function(){return $(this).val();}).get(); 

现在在json我希望如果这些数组的任何元素为null,则从数组中删除该元素。

例如:

{"paperSupply":["","2","3","","5"],"paperConsum":["1","","4","5","6"]}

如果这是来自上面代码的json, 那么我想要像这样的json,

{"paperSupply":["2","3","5"],"paperConsum":["","4","6"]}

如果paperSupply的任何索引为null,则它应该为null,那么第二个数组的索引也应该被删除。

这是演示小提琴DEMO

2 个答案:

答案 0 :(得分:2)

您可以从.map()返回undefined以忽略空值。

  

在回调函数中,这指的是当前的DOM元素   对于每次迭代。该函数可以返回单个数据项或   要插入到结果集中的数据项数组。如果   返回数组,数组内的元素插入到   组。 如果函数返回null或undefined,则不会有任何元素   插入

var paperSupply = $('.PaperSupply').map(function () {
    return $(this).val().trim() || undefined; //use trim only if you want to discard inputs with space only
}).get();

演示:Fiddle

更新

var PaperConsum = [],
    $PaperConsums = $('.PaperConsum');
var paperSupply = $('.PaperSupply').map(function (i, el) {
    var value = $(this).val().trim(); //use trim only if you want to discard inputs with space only
    if (value) {
        PaperConsum.push($PaperConsums.eq(i).val() || '');
        return value;
    }
}).get();

console.log(paperSupply, PaperConsum)

演示:Fiddle

答案 1 :(得分:0)

您可以添加过滤器:

$('.PaperSupply').map(function(){
    return $(this).val().trim();
}).get().filter(Boolean);