Как вернуть элемент из массива, используя метод фильтра? - PullRequest
0 голосов
/ 15 января 2019

Этот код возвращает массив массивов:

var values = [[1],["a"],,["b"],[""],["c"]];
var noBlankValues = values.filter(function (el) {
  var v = el != null && el != "";
  return v;
});
console.log(noBlankValues);

Как мне изменить его, чтобы получить массив типа [1,"a","b","c"]? Я попробовал это, но безуспешно:

    var values = [[1],["a"],,["b"],[""],["c"]];
    var noBlankValues = values.filter(function (el) {
      var v = el != null && el != "";
      return v[0];
    });
    console.log(noBlankValues);

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Вы можете использовать flat и filter, как это. Метод flat также удаляет отверстия в массивах ( MDN )

const values = [[1],["a"],,["b"],[""],["c"]];
const noBlankValues = values.flat().filter(a => a);
console.log(noBlankValues);

Приведенный выше фильтр удаляет все значения falsy. Если вы хотите удалить пустые и пустые строки:

const values = [[1],["a"],,["b"],[""],["c"]];
const noBlankValues = values.flat().filter(a => a !== null && a !== "");
console.log(noBlankValues);

Примечание: Совместимость браузера для flat()

0 голосов
/ 15 января 2019

Стоит отметить, что функция фильтра требует логического возврата MSDN

Сначала будут отфильтрованы значения, что даст вам массив без пробелов.

values = [[1],["a"],,["b"],[""],["c"]];
noBlankValues = values.filter(function (el) {
  return el[0] != null && el[0] != "";
});

console.log(noBlankValues);

Вы можете перебрать массив, используя функцию map, чтобы получить элементы непосредственно в основном массиве.

values = [[1],["a"],,["b"],[""],["c"]];
noBlankValues = values.filter(function (el) {
  return el[0] != null && el[0] != "";
}).map(function(item) {
  return item[0];
});

console.log(noBlankValues);
0 голосов
/ 15 января 2019

Вы можете отобразить элементы массива, а затем отфильтровать пустые строки.

var values = [[1], ["a"], , ["b"], [""], ["c"]],
    result = values
        .map(([v]) => v)
        .filter(v => v !== '');
    
console.log(result);

ES5

var values = [[1], ["a"], , ["b"], [""], ["c"]],
    result = values
        .map(function (v) { return v[0]; })
        .filter(function (v) { return v !== ''; });
    
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...