Удалить пустые подмассивы в Javascript - PullRequest
1 голос
/ 06 июля 2019

У меня есть такой объект

var data = [[1,2,34,4,5,6],[3,34,5,3,42,4],[,,,,,],[,,,],[,,,,,],[1,1]]

Мне нужно отфильтровать его и получить такой результат:

var data = [[1,2,34,4,5,6],[3,34,5,3,42,4],[1,1]]

Я пытался сделать это с array.filter(), но я могу 'не получить правильное выражение.

Ответы [ 5 ]

2 голосов
/ 06 июля 2019

Использование filter и some

let a = [[1,2,34,4,5,6],[3,34,5,3,42,4],[,,,,,],[,,,],[,,,,,],[1,1]]

let final = a.filter(val=> val.some(v => true))

console.log(final)
2 голосов
/ 06 июля 2019
 const result = array.map(it => it.filter(_ => true)).filter(sub => sub.length)

Прежде всего удалите все пустые слоты из внутренних массивов, затем удалите все массивы длиной 0.

0 голосов
/ 07 июля 2019

let arr = [[1],[1,2],[,2],[,,],,[]]

console.log(JSON.stringify( arr.filter(a => 0 in a) ))

console.log(JSON.stringify( arr.filter(a => Object.keys(a).length) )) // to include sparse subarrays
0 голосов
/ 06 июля 2019

Вот вам более декларативный пример.Надеюсь, это поможет:

  • создать функцию isArrayEmpty(arr), которая возвращает логическое значение true, если массив пуст.Чтобы углубиться в обнаружение пустых значений в массиве (не только falsy), посмотрите этот поток stackoverflow .Также см. Комментарий Питера.
  • с этой функцией, фильтр data, исключая пустые подмассивы.

var data = [[1,2,34,4,5,6],[3,34,5,3,42,4],[,,,,,],[,,,],[,,,,,],[1,1]]

var isArrayEmpty = arr => !arr.filter(elem => true).length;

var result = data.filter(subarray => !isArrayEmpty(subarray))

console.log(result)
0 голосов
/ 06 июля 2019

это случай двойного фильтра: (и самый короткий код);)

var  data = [[1,2,34,4,5,6],[3,34,5,3,42,4],[,,,,,],[,,,],[,,,,,],[1,1]]

var R = data.filter(r=>r.filter(x=>x).length)

console.log( JSON.stringify(R) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...