如何在jquery数组中排除空值?

per*_*ine 1 jquery

以下是带有datepicker类的输入字段:

<input type="text" class="datepicker" value="" />
<input type="text" class="datepicker" value="" />
<input type="text" class="datepicker" value="2011-02-15" />
<input type="text" class="datepicker" value="2011-02-16" />
Run Code Online (Sandbox Code Playgroud)

我需要创建一个日期数组,排除空白值并返回最大值.以下代码似乎不会排除空值:

var datelist = [];
$(".datepicker").each(function(i) {
    if (this.value!="") {datelist[i] = this.value;}
});
datelist.sort();
datelist.reverse();
alert(datelist); //,,2011-02-16,2011-02-15
alert(datelist[0]); //undefined
Run Code Online (Sandbox Code Playgroud)

有什么收获?

Fel*_*ing 6

它排除了空值.这就是为什么datalist[0]undefined.

索引的0值为空,因此datelist[0] = this.value;不会执行.数组中设置的唯一值是带键230,1以及所有键>3 undefined.

如果包含这些值,则不会得到undefined一个空字符串.

您不应该使用索引向数组添加值.push()他们:

$(".datepicker").each(function(i) {
    if (this.value!="") {datelist.push(this.value);}
});
Run Code Online (Sandbox Code Playgroud)

也就是说,更简洁的方法是:

var datelist = $('.datepicker[value!=""]').map(function() {
    return this.value;
}).get();
Run Code Online (Sandbox Code Playgroud)

参考: .map(),.get()