web-dev-qa-db-ja.com

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

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

@Bazがレイアウトしたとおりに与えられたものに気づいたら、

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

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

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

この質問に対するすべてのAnswersは、ループの形を指していました。

私の質問:removeall indexes with emptystringループなし?...配列の繰り返し以外に他の方法はありますか?

わからないregexまたはjQueryである可能性がありますか?

すべての回答や提案は大歓迎です。

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

filter documentation


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

矢印関数ドキュメント

296
Isaac
var newArray = oldArray.filter(function(v){return v!==''});
18
haithamahmed

注意してください:ドキュメントには次のように書かれています:

filterはECMA-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;
  };
}
8
ErickBest
arr = arr.filter(v => v);

返されるvは暗黙的にtruthyに変換されます

3
haind

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
sansid1983

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

    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);
0
Atif Hussain