this 空の文字列を削除する美しい方法-arr = arr.filter(Boolean)
が見つかりました。
ただし、空白文字列では機能しないようです。
var arr = ['Apple', ' ', 'Mango', '', 'Banana', ' ', 'Strawberry'];
arr = arr.filter(Boolean);
// ["Apple", " ", "Mango", "Banana", " ", "Strawberry"]
// should be ["Apple", "Mango", "Banana", "Strawberry"]
この方法を拡張して空白も削除する良い方法はありますか、または最初に配列を繰り返して空白を削除する必要がありますか?
filter
は機能しますが、正しい述語関数が必要です。これはBoolean
ではありません(この目的のため):
_// Example 1 - Using String#trim (added in ES2015, needs polyfilling in outdated
// environments like IE)
arr = arr.filter(function(entry) { return entry.trim() != ''; });
_
または
_// Example 2 - Using a regular expression instead of String#trim
arr = arr.filter(function(entry) { return /\S/.test(entry); });
_
(_\S
_は「非空白文字」を意味するため、/\S/.test(...)
は文字列に少なくとも1つの非空白文字が含まれているかどうかを確認します。)
または(おそらく少し船外で読みにくい)
_// Example 3
var rex = /\S/;
arr = arr.filter(rex.test.bind(rex));
_
ES2015(別名ES6)矢印機能を使用すると、さらに簡潔になります。
_// Example 4
arr = arr.filter(entry => entry.trim() != '');
_
または
_// Example 5
arr = arr.filter(entry => /\S/.test(entry));
_
Live Examples-ES5以前:
_var arr = ['Apple', ' ', 'Mango', '', 'Banana', ' ', 'Strawberry'];
snippet.log("Example 1: " + JSON.stringify(arr.filter(function(entry) { return entry.trim() != ''; })));
snippet.log("Example 2: " + JSON.stringify(arr.filter(function(entry) { return /\S/.test(entry); })));
var rex = /\S/;
snippet.log("Example 3: " + JSON.stringify(arr.filter(rex.test.bind(rex))));
_
_<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
_
...およびES2015(ES6)のもの(ブラウザがまだ矢印関数をサポートしていない場合は動作しません):
_var arr = ['Apple', ' ', 'Mango', '', 'Banana', ' ', 'Strawberry'];
snippet.log("Example 4: " + JSON.stringify(arr.filter(entry => !entry.trim() == '')));
snippet.log("Example 5: " + JSON.stringify(arr.filter(entry => /\S/.test(entry))));
_
_<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
_
空の文字列を偽の値として利用できます。
Array#filter
with String#trim
。
ES6 Arrow関数を使用する:
arr = arr.filter(e => String(e).trim());
var arr = ['Apple', ' ', 'Mango', '', 'Banana', ' ', 'Strawberry'];
var nonEmpty = arr.filter(e => String(e).trim());
document.getElementById('result').innerHTML = JSON.stringify(nonEmpty, 0, 4);
<pre id="result"></pre>
ES5匿名関数を使用:
arr = arr.filter(function(e) {
return String(e).trim();
});
var arr = ['Apple', ' ', 'Mango', '', 'Banana', ' ', 'Strawberry'];
var nonEmpty = arr.filter(function(e) {
return String(e).trim();
});
document.getElementById('result').innerHTML = JSON.stringify(nonEmpty, 0, 4);
<pre id="result"></pre>
このMDNリファレンス に基づく:
_
\s
_
スペース、タブ、フォームフィード、ラインフィード、その他のUnicodeスペースを含む単一の空白文字に一致します。 _[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
_と同等。
そして ECMA 262リファレンス 、_\s
_が一致する必要があると言う "ホワイトスペース" のように_\u0009
_(タブ、_<TAB>
_)、_\u000B
_(垂直タブ、_<VT>
_)、_\u000C
_(フォームフィード、_<FF>
_)、_\u0020
_(スペース、_<SP>
_)、_\u00A0
_ (改行なしスペース、_<NBSP>
_)、_\uFEFF
_(バイトオーダーマーク、_<BOM>
_)、およびその他のカテゴリ「Z」(_<USP>
_)、および 「ラインターミネータ」 like _\u000A
_(ラインフィード、_<LF>
_)、_\u000D
_(キャリッジリターン、_<CR>
_)、_\u2028
_(行区切り、<LS>
_)および_\u2029
_(段落区切り文字、_<PS>
_)、次のコードを使用して、trim()
がネイティブで利用できない場合にのみ、空または空白の要素を削除できます。 :
_var arr = ['Apple', ' ', 'Mango', '', 'Banana', ' ', 'Strawberry'];
arr = arr.filter(s => s.replace(/\s+/g, '').length !== 0);
// Or for ES5
// arr = arr.filter(function (el) { return el.replace(/\s+/g, '').length !== 0; });
console.log(arr);
_
一部の古いブラウザが_\s
_で異なる動作をする場合、それを_[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
_文字クラスに置き換えます:
_arr = arr.filter(function (el) { return el.replace(/[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/g, '').length !== 0; });
_
また、今後の新しいUnicodeスペースを含めるためにさらにカスタマイズすることもできます。
これを試すことができます approach 。このプロセスは簡単で、私にとってはうまくいきました。
let arrayEle = ["abc", " "," ", "def", "xyz", " "];
arrayEle = arrayEle.filter((element) => {
return /\S/.test(element);
});
console.log(arrayEle);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>