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


этот вопрос был задан здесь: удалить пустые строки из массива при сохранении записи индексов с непустыми строками

если бы вы заметили, как @Baz выложил его;

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

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

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

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

мой вопрос: есть ли возможность удалить все indexС emptystringбез какой-либо петли? ... есть ли другая альтернатива, кроме итерации массива?

может быть regex или какой-нибудь jQuery что мы не знаем?

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

5 80

5 ответов:

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"]

Arrow functions documentation

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

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: В документации говорится:

filter является расширением JavaScript для стандарта ECMA-262; как таковой он может отсутствовать в других реализациях стандарта. Вы можно обойти это, вставив следующий код в начале ваших скриптов, позволяющих использовать фильтр в реализациях ECMA-262 которые изначально не поддерживают его. Этот алгоритм именно тот указано в 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;
  };
}

Если вы используете 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);