Удалить пустые строки из массива, сохраняя запись без цикла?
Этот вопрос задавали здесь:
Удалить пустые строки из массива, сохраняя запись индексов с непустыми строками
Если бы вы заметили, что данный @Baz выложил это;
"I", "am", "", "still", "here", "", "man"
", и из этого я хочу создать следующие два массива:"
"I", "am", "still", "here", "man"
Все ответы на этот вопрос относятся к форме цикла.
Мой вопрос: есть ли возможность удалить все index
es с помощью empty
string
без каких-либо циклов?... есть ли другая альтернатива кроме повторения массива?
Может быть, есть некоторые regex
или некоторые jQuery
, о которых мы не знаем?
Все ответы или предложения высоко оценены.
Ответы
Ответ 1
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"]
Документация по функциям стрелок
Ответ 2
var newArray = oldArray.filter(function(v){return v!==''});
Ответ 3
ОБРАТИТЕ ВНИМАНИЕ:
В документации указано:
filter
- расширение JavaScript стандарта ECMA-262; как таковой он может отсутствовать в других реализациях стандартного. Вы может обойти это, вставив следующий код в начале ваших сценариев, позволяя использовать фильтр в реализациях ECMA-262 которые не поддерживают его. Этот алгоритм является именно тем указанном в ECMA-262, 5-е издание, предполагая, что fn.call оценивает исходное значение Function.prototype.call, и что Array.prototype.push имеет свое первоначальное значение.
Итак, чтобы избежать некоторой душевной боли, вам, возможно, придется добавить этот код в свой script В начале.
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;
};
}
Ответ 4
Если вы используете 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];
Ответ 5
arr = arr.filter(v => v);
в качестве возвращаемого v
является неявно преобразуется в truthy
Ответ 6
i.e нам нужно взять несколько адресов электронной почты, разделенных запятой, пробелами или новой строкой, как показано ниже.
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);