2013-06-16 11 views
5

入力要素のセットをカプセル化するjQueryオブジェクトobjがあります。

私は各要素の値のうちの配列を作るために、このコードを使用しています:

$.map(obj, function(elem, i){ 
    return $(elem).val(); 
}); 

問題が時々入力フィールドの一部が無効な値が含まれていると私はそれらをスキップしたいということです配列を作成するプロセス。 return falseを単純に実行しても要素はスキップされず、代わりにfalseが配列に挿入されます。

なしで明示的に使用する方法があるかどうかを知りたい場合は、.eachを明示的に使用してください。

答えて

11

これはjQueryコレクションなので、.mapを直接実行してから.getを使用して配列にすることができます。

var values = obj.map(function(){ 
    return this.value ? this.value : null; 
}).get(); 

注:上記のチェックでは、偽ではない値が返されます。

test case on jsFiddleを参照してください。

+1

このようにしても、 'var myArray = ['one'、 'two'、 'three']; var i = myArray.filter(function(n){ return n }); 'あなたは' get'を使ったのですか? – wuhcwdc

+0

@PankajGargあなたが配列を持っている場合は、必ず開始してください。この場合、OPにはjQueryコレクションがあり、有効な値を持つ配列が必要です。 '.map'を' .get'と組み合わせて使用​​すると、まずjQueryコレクションをマップし、それを配列に変換します。 jQueryの '.filter'と' .map'は、ネイティブ 'Array'オブジェクトの同様のメソッドとは異なって動作することに注意してください。 – mekwall

4

私はトリックをしたものを何も返さないようにしておいたはずですが、なぜこれが私の頭の前に来なかったのか分かりません。私はちょうどここに長さをテストし、同じにとどまるために、検証コードを省略

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

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

EDIT:

場合

あなたは、ここで同じことをやりたいの修正です件名

+0

これは間違っているようですが、**無効な値**と空白/ヌルの間に違いがありますか? – wuhcwdc

+0

'return;は' undefined'を取得することをお勧めします。つまり、結果は未定義です。具体的には「未定義」を返します。これにより、要素は配列に挿入されません。しかし、私は研究(または他のコメント)なしでこれを実証することはできません。未定義のMozilla状態は_returned_です。私はこの議論が何度も行われたと思います) –

+0

@PankajGarg私は目的にとどまるために検証コード全体を省略しました。 –