Почему метод фильтра не удаляет все элементы массива? - PullRequest
2 голосов
/ 08 апреля 2019
this.arol.filter(x=>x.length!==0
                ?(this.arol.splice(this.arol.indexOf(x),1))
                :!true)

Я пытался изменить его многими различными способами, но он по-прежнему не удаляет все элементы массива, он всегда оставляет 1 или 2 после удаления большинства из них .... Я думаю, что проблема заключается вусловие ... Мы проверяем, не равна ли длина элементов массива 0 (которые являются строками) ...

Ответы [ 4 ]

5 голосов
/ 08 апреля 2019

Не пытайтесь splice при filter ing - вместо этого возвращайте из обратного вызова filter истинное или ложное значение, в зависимости от того, хотите ли вы включить элемент, повторяемый пов новом массиве и использовать результирующий массив, который возвращается из .filter:

this.arol = this.arol.filter(x => x.length !== 0);
^^^^^^^^^^^^
2 голосов
/ 08 апреля 2019

Если вы хотите сохранить ту же ссылку на внешний массив и изменить оригинал, вы можете склеить в цикле, если вы работаете от начала до конца, чтобы не влиять на индексирование, к которому вы еще не пришли при изменении длина массива:

const arr = [[1],[],[2]]
arr.reduceRight((_,c,i) => c.length || !!arr.splice(i,1))

console.log(arr)
0 голосов
/ 08 апреля 2019

Если Splice удален из этого кода, он не будет удалять элементы.this.arol.splice(this.arol.indexOf(x),1) здесь он будет проходить через каждый элемент внутри этого массива, а x будет текущей итерацией, которая будет склеиваться из массива, как вы написали метод склейки.Удалите splice, он будет работать нормально.

0 голосов
/ 08 апреля 2019

Проблема в том, что вы пытаетесь соединить в то же время, когда используете фильтр.Фильтр не удаляет элементы из вашего массива, он создает новый массив с отфильтрованными данными, как описано здесь:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

Вы можете назначить результат тому же массиву, как предложеноCertainPerformance.

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