[解決済み] Javascriptで配列から空の要素を削除する
質問
JavaScriptで配列から空の要素を取り除くには?
それとも、ループして手動で削除する必要がありますか?
どのように解決するのですか?
EDITです。
この質問は、約9年前、便利な組み込みメソッドがあまりなかったころに
Array.prototype
.
さて、確かに、私がお勧めするのは
filter
メソッドを使用します。
このメソッドが返すのは 新しい配列 には、指定したコールバック関数の条件を満たす要素が含まれます。
例えば
null
または
undefined
の値を指定します。
var array = [0, 1, null, 2, "", 3, undefined, 3,,,,,, 4,, 4,, 5,, 6,,,,];
var filtered = array.filter(function (el) {
return el != null;
});
console.log(filtered);
例えば、文字列を扱っている場合、上記の関数は空の文字列である要素を削除することはできません。
よく見かける典型的なパターンとしては、以下のような要素を削除することです。
ファルシー
空文字列を含む
""
,
0
,
NaN
,
null
,
undefined
および
false
.
に渡すことができます。
filter
メソッドは
Boolean
のコンストラクタ関数で指定したり、 フィルタ条件関数で同じ要素を返したりすることができます。
var filtered = array.filter(Boolean);
または
var filtered = array.filter(function(el) { return el; });
どちらの方法でも、これは
filter
メソッドを呼び出します。
Boolean
コンストラクタの値を関数として変換し、2 番目のケースでは
filter
メソッドは、内部でコールバックの戻り値を暗黙のうちに
Boolean
.
疎な配列を扱っていて、"holes" を取り除こうとする場合は、以下のようにします。
filter
メソッドに、true を返すコールバックを渡すなどしてください。
var sparseArray = [0, , , 1, , , , , 2, , , , 3],
cleanArray = sparseArray.filter(function () { return true });
console.log(cleanArray); // [ 0, 1, 2, 3 ]
古い回答です。 やめてくれ!
私は、ネイティブのArrayプロトタイプを拡張して、このメソッドを使用しています。
Array.prototype.clean = function(deleteValue) {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {
this.splice(i, 1);
i--;
}
}
return this;
};
test = new Array("", "One", "Two", "", "Three", "", "Four").clean("");
test2 = [1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,];
test2.clean(undefined);
あるいは、既存の要素を単純に別の配列にプッシュすることもできます。
// Will remove all falsy values: undefined, null, 0, false, NaN and "" (empty string)
function cleanArray(actual) {
var newArray = new Array();
for (var i = 0; i < actual.length; i++) {
if (actual[i]) {
newArray.push(actual[i]);
}
}
return newArray;
}
cleanArray([1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,]);
関連
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] JavaScriptで配列を空にするにはどうしたらいいですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】オブジェクトからプロパティを削除する(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 実装 サイバーパンク風ボタン
おすすめ
-
fetch ネットワークリクエストラッパーの説明例
-
JSアレイループと効率解析の比較
-
JavaScriptのクロージャの説明
-
vueはopenlayersを使用してスカイマップとガオードマップをロードする
-
Vueのフィルタの説明
-
[解決済み] テスト
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】「X-Frame-Options」を「SAMEORIGIN」に設定したため、フレームでの表示を拒否された。
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方