ループなしのレコードを保持しながら配列から空の文字列を削除しますか?


90

この質問はここで尋ねられました: 空でない文字列を含むインデックスのレコードを保持しながら、配列から空の文字列を削除します

@Bazとして指定されたものがレイアウトされていることに気づいたら、

"I", "am", "", "still", "here", "", "man"

「これから、次の2つの配列を作成したいと思います。」

"I", "am", "still", "here", "man"

この質問に対するすべての回答は、ある形式のループに言及しています。

私の質問:ループなしですべてのes を削除する可能性はありますか?...配列を反復する以外に他の選択肢はありますか?indexempty string

私たちが気づいていないregexいくつかの可能性がjQueryありますか?

すべての回答または提案は高く評価されます。

回答:


323
var arr = ["I", "am", "", "still", "here", "", "man"]
// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(Boolean)
// arr = ["I", "am", "still", "here", "man"]

filter ドキュメンテーション


// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(v=>v!='');
// arr = ["I", "am", "still", "here", "man"]

アロー関数のドキュメント


3
私はあなたがどのように感じているかを正確に知っています、私はそれを数ヶ月前に使用して、非常に多くの小さな問題を修正しました
Isaac

14
まだIE8を実行している@DiegoPlentzの人々は、配列の空白を削除するよりもはるかに多くの問題を抱えるでしょう...最近、そのブラウザーのサポートを検討することはほとんどありません
Isaac

これは、array.filter(!!)私たちが現在取得できるものに最も近いものです:)
james_womack

2
この回答のクレジットはすべて、stackoverflow.com
Isaac

に関するいくつかの説明Booleanがいいでしょう。
robsch


9

注意してください: ドキュメントは言う:

filterECMA-262標準のJavaScript拡張機能です。その ため、標準の他の実装では存在しない場合があります。これを回避するには、スクリプトの先頭に次のコードを挿入し、ネイティブでサポートされていないECMA-262実装でフィルターを使用できるようにします。このアルゴリズムは、fn.callがFunction.prototype.callの元の値に評価され、Array.prototype.pushが元の値を持っていると仮定して、ECMA-262第5版で指定されたものとまったく同じです。

そのため、多少の心痛を避けるために、最初にこのコードをスクリプトに追加する必要がある場合があります。

if (!Array.prototype.filter) {
  Array.prototype.filter = function (fn, context) {
    var i,
        value,
        result = [],
        length;
        if (!this || typeof fn !== 'function' || (fn instanceof RegExp)) {
          throw new TypeError();
        }
        length = this.length;
        for (i = 0; i < length; i++) {
          if (this.hasOwnProperty(i)) {
            value = this[i];
            if (fn.call(context, value, i, this)) {
              result.push(value);
            }
          }
        }
    return result;
  };
}

3
arr = arr.filter(v => v);

返されるので、v暗黙的に真実に変換されます


2

jQueryを使用している場合、grepが役立ちます。


var arr = [ a, b, c, , e, f, , g, h ];

arr = jQuery.grep(arr, function(n){ return (n); });

arr 今です [ a, b, c, d, e, f, g];


2
jqueryは単純なタスクではかなりのかさばるように見える
アイザック

0

つまり、以下のように、コンマ、スペース、または改行で区切られた複数の電子メールアドレスを取得する必要があります。

    var emails = EmailText.replace(","," ").replace("\n"," ").replace(" ","").split(" ");
    for(var i in emails)
        emails[i] = emails[i].replace(/(\r\n|\n|\r)/gm,"");

    emails.filter(Boolean);
    console.log(emails);

.replace(" ","").split(" ")「すべてのスペースを何もないものに置き換えてから、すべてのスペースで分割してみてください」
Isaac

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.