[解決済み] 配列が空であるか、存在しないかを確認する方法は?[重複している]
質問
配列が空であるか、存在しないかを確認する最も良い方法は何ですか?
こんな感じ?
if(array.length < 1 || array == undefined){
//empty
}
解決方法は?
のチェックを行いたい。
undefined
を先にします。逆にすると、配列が未定義の場合にエラーが発生します。
if (array === undefined || array.length == 0) {
// array empty or does not exist
}
更新情報
この回答はかなり注目されているので、私が最初に書いた回答は、何よりも問題で評価される条件の順番が間違っていることを指摘したいと思います。この意味で、次のようないくつかのシナリオに対処できていません。
null
値、他のタイプのオブジェクトに
length
プロパティなど。また、あまりイディオム的なJavaScriptとは言えません。
フールプルーフアプローチ
コメントからヒントを得て、私が現在考えている、配列が空か存在しないかをチェックするフールプルーフな方法を以下に示します。また、変数が配列を参照しているのではなく、他のタイプのオブジェクトを参照している可能性も考慮に入れています。
length
プロパティがあります。
if (!Array.isArray(array) || !array.length) {
// array does not exist, is not an array, or is empty
// ⇒ do not attempt to process array
}
分解してみると
-
Array.isArray()
は、当然のことながら、引数が配列であるかどうかをチェックします。これは、以下のような値を除外します。null
,undefined
と、配列でないものはすべて
なお、これによって 配列のようなオブジェクト のようなarguments
オブジェクトと DOMNodeList
オブジェクトを作成します。あなたの状況によっては、これはあなたが求めている動作ではないかもしれません。 -
は
array.length
条件は、変数のlength
プロパティが 真実味のある の値を指定します。前の条件によって、私たちが実際に配列を扱っていることが既に確立されているので、より厳密な比較は、例えばarray.length != 0
またはarray.length !== 0
は必要ありません。
プラグマティック・アプローチ
多くの場合、上記はやりすぎだと思われるかもしれません。TypeScriptのような高次の言語を使っていて、コンパイル時に型チェックのほとんどをやってくれるとか、オブジェクトが実際に配列なのか、単に配列っぽいだけなのかは気にならないとか。
そういう場合は、次のような、よりイディオムなJavaScriptを選ぶことが多いですね。
if (!array || !array.length) {
// array or array.length are falsy
// ⇒ do not attempt to process array
}
あるいは、その逆もよくあります。
if (array && array.length) {
// array and array.length are truthy
// ⇒ probably OK to process array
}
の導入に伴い オプションのチェーニング演算子 (エルビス演算子)をECMAScript2020で採用することで、さらに短縮することができます。
if (!array?.length) {
// array or array.length are falsy
// ⇒ do not attempt to process array
}
あるいはその逆。
if (array?.length) {
// array and array.length are truthy
// ⇒ probably OK to process array
}
関連
-
[解決済み】ReactJSでエラー発生 Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
jq は html ページとデータを動的に分割する。
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptで変数が配列であるかどうかを確認する方法は?
-
[解決済み】未定義のオブジェクトプロパティを検出する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JavaScriptの関数この指摘の問題を説明
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
vueディレクティブv-bindの使用と注意点
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
[解決済み] 配列が空か存在するかをチェックする