Javascriptで配列から空の要素を取り除く
JavaScriptで配列から空の要素を削除するには?
簡単な方法があるのでしょうか、それとも配列をループさせて手動で削除する必要があるのでしょうか?
987
3
JavaScriptで配列から空の要素を削除するには?
簡単な方法があるのでしょうか、それとも配列をループさせて手動で削除する必要があるのでしょうか?
EDIT: この質問は、約9年前、
Array.prototype
にあまり便利な組み込みメソッドがなかった頃に答えられたものです。今では、確かに、
filter
メソッドを使うことをお勧めします。このメソッドは、あなたが提供するコールバック関数の基準を満たす要素を持つ_新しい配列_を返すことを覚えておいてください。
例えば、
null
やundefined
の値を削除したい場合です。何をもって"empty"とするかにもよりますが、例えば文字列を扱うのであれば、上記の関数は空の文字列である要素を削除しません。
よく見かける典型的なパターンとしては、空文字列
""
,0
,NaN
,null
,undefined
,false
などの falsy な要素を削除することです。例えば、
filter
メソッドやBoolean
コンストラクタ関数に渡したり、フィルタ基準関数で同じ要素を返したりすることができます。または
どちらの場合も、最初のケースでは
filter
メソッドがBoolean
コンストラクタを関数として呼び出して値を変換し、2番目のケースではfilter
メソッドが内部的にコールバックの戻り値を暗黙のうちにBoolean
にしているので、これは機能します。疎な配列を扱っていて、"hole"を取り除こうとしている場合は、例えば、真を返すコールバックを渡す
filter
メソッドを使うことができます。古い答え: Don't do this!
私はこの方法で、ネイティブのArrayプロトタイプを拡張して使っています。
あるいは、既存の要素を単純に別の配列に押し込むこともできます。
これまで提案されてきたようなループ&スプライスを試すよりも、配列をループさせて、配列から残しておきたいアイテムを集めて新しい配列を作る方が簡単だと思うかもしれません。
次のような方法があります。
実際には、もっと一般的な解決策があります。
アイデアがあれば、他のタイプのフィルタ関数を作ることができます。おそらく必要以上に多いと思いますが、私は寛大な気持ちでいました... ;)
これを試してみてください。 配列を渡すと、空の要素を削除して返してくれます。 *Jasonに指摘されたバグに対処するために更新されました。