1. ホーム
  2. javascript

[解決済み] Javascriptで配列から空の要素を削除する

2022-03-16 05:44:58

質問

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,,,,]);