118

jQueryで配列が空かnullかを調べる方法を知りたいです。試してみarray.length === 0ましたが、うまくいきませんでした。エラーもスローされませんでした。

これはコードです:

var album_text = new Array();

$("input[name='album_text[]']").each(function(){
  if( $(this).val() &&  $(this).val() != '') {
    album_text.push($(this).val());
  }
});
if (album_text.length === 0) {
  $('#error_message').html("Error");
}

else {
  // send data
}
4

5 に答える 5

181

セレクターが実際に機能している限り、配列の長さをチェックするコードに問題はありません。それはあなたが望むことをするはずです。コードをクリーンアップして、よりシンプルで読みやすくする方法はたくさんあります。これは、私がクリーンアップしたものに関するメモを含むクリーンアップされたバージョンです。

var album_text = [];

$("input[name='album_text[]']").each(function() {
    var value = $(this).val();
    if (value) {
        album_text.push(value);
    }
});
if (album_text.length === 0) {
    $('#error_message').html("Error");
}

else {
  //send data
}

あなたがしていたことと私が変更したことについてのいくつかのメモ。

  1. $(this)は常に有効な jQuery オブジェクトであるため、チェックする必要はありませんif ($(this))。内部にDOMオブジェクトがない場合がありますが、必要に応じて確認できますが、アイテムがないとループが実行されない$(this).lengthため、ここでは必要ありません。ループ内は常に何かになります。.each()$(this).each()
  2. 同じ関数で $(this) を複数回使用するのは非効率的です。一度ローカル変数に入れてから、そのローカル変数から使用する方がはるかに優れています。
  3. []ではなく で配列を初期化することをお勧めしますnew Array()
  4. if (value)値が文字列であると予想される場合は、両方から保護されるためvalue == null、行う必要はvalue == undefinedありvalue == ""ませんif (value && (value != ""))if (value)できることは、3 つの空の条件すべてを確認することだけです。
  5. if (album_text.length === 0)配列が有効で初期化された配列(ここにある)である限り、配列が空であるかどうかがわかります。

このセレクターで何をしようとしています$("input[name='album_text[]']")か?

于 2011-08-25T23:48:56.193 に答える
9

@jesenko が述べたように、jquery から $.isEmptyObject を使用して配列が空かどうかを確認するのは危険だと思います。私はちょうどその問題に遭遇しました。

isEmptyObject docでは、次のことが言及されています。

引数は常にプレーンな JavaScript オブジェクトでなければなりません

によって決定できます$.isPlainObject。の戻り値$.isPlainObject([])は false です。

于 2016-02-22T07:06:58.410 に答える
8

''配列にプッシュする前に (空の文字列)を確認する必要があります。配列に空の文字列の要素があります。その後、あなたのalbum_text.length === 0意志はうまくいきます。

于 2011-08-25T23:03:55.447 に答える