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

时间:2011-02-15 14:47:19

标签: 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" />

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

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

有什么问题?

6 个答案:

答案 0 :(得分:6)

它排除了空值。这就是datalist[0]undefined的原因。

索引0的值为空,因此不会执行datelist[0] = this.value;。数组中设置的唯一值是带有键23的值,使得键01和所有>3 undefined

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

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

$(".datepicker").each(function(i) {
    if (this.value!="") {datelist.push(this.value);}
});

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

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

参考: .map().get()

答案 1 :(得分:2)

尝试

$('.datepicker[value!=""]')

答案 2 :(得分:1)

您可以使用.map$.grep方法获取数组并删除空项:

将所有值放入数组中:

var datelist = $(".datepicker").map(function() { return this.value; }).get();

从数组中删除空项目:

datelist = $.grep(datelist, function(s) { return s.length != 0; });

答案 3 :(得分:0)

尝试更改此部分 -

var datelist = [];
$(".datepicker").each(function(i) {
    if (this.value!="") {datelist[i] = this.value;}
});

到此 -

var datelist = [];
var index = 0;
$(".datepicker").each(function(i) {
    if ( $(this).val() != "") 
    {
        datelist[index++] = $(this).val();
    }
});

答案 4 :(得分:0)

就像做a = []; a[0] = 1; a[2] = 3;一样 - 如果你跳过索引,它将被填充undefined值。因此,您可以将代码更改为以下内容:

$(".datepicker").each(function() {
    if (this.value != "" || this.value != undefined) {
          datelist[datelist.length] = this.value;
    }
});

答案 5 :(得分:0)

首先,不要在第二个函数参数中使用this - 请参阅http://fixingthesejquery.com/#slide29

然后,将值附加到列表而不是使用索引(请记住,您不为i的某些值创建数组元素!):

if (this.value) {
    datelist.push(this.value); 
}

所以,代码应该是这样的:

var dateList = [];
$(".datepicker").each(function(i, elem) {
    if (elem.value) {
        dateList[i] = elem.value;
    }
});
dateList.sort();
dateList.reverse();