この質問はここで尋ねられました: 空の文字列のないインデックスの記録を保持しながら、配列から空の文字列を削除します
@Bazがレイアウトしたとおりに与えられたものに気づいたら、
"I", "am", "", "still", "here", "", "man"
」とこれから、次の2つの配列を作成したいと思います:」
"I", "am", "still", "here", "man"
この質問に対するすべてのAnswersは、ループの形を指していました。
私の質問:removeall index
es with empty
string
ループなし?...配列の繰り返し以外に他の方法はありますか?
わからないregex
またはjQuery
である可能性がありますか?
すべての回答や提案は大歓迎です。
var arr = ["I", "am", "", "still", "here", "", "man"]
// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(Boolean)
// arr = ["I", "am", "still", "here", "man"]
// arr = ["I", "am", "", "still", "here", "", "man"]
arr = arr.filter(v=>v!='');
// arr = ["I", "am", "still", "here", "man"]
var newArray = oldArray.filter(function(v){return v!==''});
注意してください:ドキュメントには次のように書かれています:
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;
};
}
arr = arr.filter(v => v);
返されるv
は暗黙的にtruthyに変換されます
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];
になりました
つまり、次のように、カンマ、スペース、または改行で区切られた複数のメールアドレスを取得する必要があります。
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);