使用jQuery跳过元素';新加坡元地图

使用jQuery跳过元素';新加坡元地图,jquery,arrays,skip,Jquery,Arrays,Skip,我有一个jQuery对象obj,它封装了一组输入元素 我使用这段代码是为了用每个元素的值生成一个数组: $.map(obj, function(elem, i){ return $(elem).val(); }); 问题是,有时一些输入字段包含无效值,我想在创建数组的过程中跳过它们。执行一个简单的返回false似乎不会跳过元素,而是在数组中插入一个false 我想知道是否有一种方法可以在不使用的情况下真正做到这一点。每个都是显式的。我本应该尝试不返回任何(无效)的东西,但我不知道为什么

我有一个jQuery对象
obj
,它封装了一组输入元素

我使用这段代码是为了用每个元素的值生成一个数组:

$.map(obj, function(elem, i){
    return $(elem).val();
});
问题是,有时一些输入字段包含无效值,我想在创建数组的过程中跳过它们。执行一个简单的
返回false
似乎不会跳过元素,而是在数组中插入一个
false


我想知道是否有一种方法可以在不使用
的情况下真正做到这一点。每个
都是显式的。

我本应该尝试不返回任何(无效)的东西,但我不知道为什么我之前没有想到这一点

如果您也要这样做,下面是修复方法:

$.map(obj, function(elem, i){
    if($(elem).val().length == 0) return;

    return $(elem).val();
});
编辑


我只是在这里测试了长度,并省略了验证代码,以便保持在同一主题上

,因为它是一个jQuery集合,您可以直接执行,然后使用它,使它成为一个数组

var values = obj.map(function(){
    return this.value ? this.value : null;
}).get();
注意:上述检查将返回任何不为假的值


请参阅。

这似乎不正确,无效值和空白/空值之间存在差异?我建议
返回获取未定义的
。也就是说,结果是未定义的,而不是专门返回“未定义”。这将导致元素不插入数组中。然而,没有研究(或其他评论),我无法证实这一点。返回未定义的Mozilla状态。最好不要走得太远——我认为这种讨论以前已经发生过很多次;)@PankajGarg我故意省略了整个验证代码,只是为了保持主题…@DanyKhalife检查长度是否正确(我经常这样做),如果您还想丢弃空字符串“”。@AndrewGibson这与本机的
Array.map
不同。根据,返回
null
undefined
不会在数组中插入任何内容。我们也可以通过这种方式
var myArray=['one','two','three'];var i=myArray.filter(函数(n){return n})
我可以知道您是否使用了
get
?@PankajGarg如果您有一个数组开始,当然可以。在这种情况下,OP有一个jQuery集合,需要一个具有有效值的数组。结合使用
.map
.get
将首先映射我们的jQuery集合,然后将其转换为数组。请注意,jQuery的
.filter
.map
与本机
数组
对象中的类似方法相比工作方式不同。