web-dev-qa-db-ja.com

配列が空かnullかをチェック

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
}
96
input

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

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. valueが文字列であることが期待されるときのif (value)は、両方ともvalue == nullvalue == undefinedおよびvalue == ""から保護するので、if (value && (value != ""))を行う必要はありません。 if (value)を実行すれば、3つの空の条件すべてをチェックできます。
  5. if (album_text.length === 0)は、それが有効で初期化された配列(ここにある)である限り、その配列が空であるかどうかを教えてくれます。

このセレクタ$("input[name='album_text[]']")で何をしたいのですか?

141
jfriend00

ユーザーJQueryは、配列に要素が含まれているかどうかを調べるEmptyObjectです。

var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true
66
Mayank Raipure

配列にプッシュする前に''(空の文字列)をチェックする必要があります。配列に空の文字列の要素があります。それならあなたのalbum_text.length === 0は問題なく動作します。

8
Daniel A. White

@jesenkoが述べたように、配列が空かどうか調べるためにjqueryから$ .isEmptyObjectを使うのは危険だと思います。私はちょうどその問題に出会った。

isEmptyObject doc には、次のように記載されています。

引数は常に普通のJavaScriptオブジェクトであるべきです

これは$.isPlainObjectで決定できます。 $.isPlainObject([])の戻り値はfalseです。

7
rhinoxi