Удалить пустые строки из массива, сохраняя запись без цикла?

Этот вопрос задавали здесь: Удалить пустые строки из массива, сохраняя запись индексов с непустыми строками

Если бы вы заметили, что данный @Baz выложил это;

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

", и из этого я хочу создать следующие два массива:"

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

Все ответы на этот вопрос относятся к форме цикла.

Мой вопрос: есть ли возможность удалить все index es с помощью empty string без каких-либо циклов?... есть ли другая альтернатива кроме повторения массива?

Может быть, есть некоторые regex или некоторые jQuery, о которых мы не знаем?

Все ответы или предложения высоко оценены.

Ответ 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);