Фильтровать пустой массив из родительского массива - PullRequest
0 голосов
/ 21 декабря 2018

Как мне полностью удалить пустой массив из родительского массива, прежде чем добавлять новый элемент.

У меня есть структура, которая выглядит следующим образом

var parentArray = [ ['123', '345'], [], ['12'] ]

Я хочу удалить массивпо индексу 1 перед добавлением нового массива.

Я пробовал это, но он не удаляется:

parentArray.filter((array, index) => {
    if (array.length === 0) {
        parentArray.splice(index, 1);
    }
})
parentArray.push(['435']);

console.log(parentArray);  //Still give  [["123", "345"], [], ["12"]]

Ответы [ 6 ]

0 голосов
/ 21 декабря 2018

Вы можете использовать lodash _.reject() с _.isEmpty().

Отклонение удаляет элемент, если предикат возвращает true, а isEmpty возвращает true для пустых массивов.

var parentArray = [ ['123', '345'], [], ['12'] ]

var result = _.reject(parentArray, _.isEmpty)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

Без lodash вы можете использовать Array.filter() и просто вернуть length.Поскольку 0 является ложным, и элемент будет удален:

const numbers = [ ['123', '345'], [], ['12'] ]

const result = numbers.filter(o => o.length)

console.log(result)
0 голосов
/ 21 декабря 2018

Хорошо, во-первых, как сказано выше, не изменяйте никакие итерации при итерации по нему.
и Array.filter возвращает новый массив на основе заданного условия, и он не изменит массив, на котором он находится
если вы хотите сохранить исходный parentArray и создать новый массив без пустых массивов в parrentArray, то выполните следующее

let parentArray2 = parentArray.filter(e=>e.length !== 0)

, и вы получите новый массив, на который ссылается parentArray2 которое будет
[ [ '123', '345' ], [ '12' ] ]
и parentArray останется без изменений, а затем вы можете вставить новый массив в parentArray2

, если вы не хотите сохранять оригинал parentArray затем выполните следующее
parentArray = parentArray.filter(e=>e.length !== 0)
родительский массив будет инициализирован новым массивом [ [ '123', '345' ], [ '12' ] ]
, и затем вы можете вставить любой элемент массива или объект в parentArray

0 голосов
/ 21 декабря 2018

Нет необходимости в библиотеках lodash или 3rd part, вот что вам действительно нужно,

var numbers = [ ['123', '345'], [], ['12'] ]

result = numbers.filter(x => x.length > 0);
console.log(result);
0 голосов
/ 21 декабря 2018

Следующий код сохраняет непустые элементы и сохраняет их внутри результата.

const result = _.filter(parentArray, (item, i) => {
  return !_.isEmpty(item);
});
console.log(result);
0 голосов
/ 21 декабря 2018

Вы не должны изменять свой массив в методе фильтра.Функция обратного вызова должна возвращать true, если вы хотите сохранить элемент, и false, если нет.

const parentArray = [['123', '345'], [], ['12']];

const filteredArray = parentArray.filter( item => item.length !== 0);

console.log(filteredArray)
0 голосов
/ 21 декабря 2018

Используйте _.filter для этого:

parentArray = _.filter(parentArray, function (array) {
    return array.length > 0;
})
...