#javascript #node.js #ecmascript-6
#javascript #node.js #ecmascript-6
Вопрос:
this.arol.filter(x=>x.length!==0
?(this.arol.splice(this.arol.indexOf(x),1))
:!true)
Я пытался изменить его множеством разных способов, но он по-прежнему не удаляет все элементы массива, он всегда оставляет 1 или 2 после удаления большинства из них…. Я думаю, что проблема в условии… Мы проверяем, не равна ли длина элементов массива 0 (которые являются всеми строками)…
Комментарии:
1.
!true
? Позвольте мне представить моего другаfalse
.2. Никогда не используйте
splice
во время итерации. Почему вы просто не используетеarol = arol.filter(…)
?
Ответ №1:
Не пытайтесь делать это splice
во время filter
ввода — вместо этого верните из filter
обратного вызова значение true или falsey, в зависимости от того, хотите ли вы включить элемент, который повторяется, в новый массив, и используйте результирующий массив, который возвращается из .filter
:
this.arol = this.arol.filter(x => x.length !== 0);
^^^^^^^^^^^^
Ответ №2:
Если вы хотите сохранить ту же ссылку на внешний массив и изменить оригинал, вы можете выполнить соединение в цикле, если вы работаете от конца к началу, чтобы не влиять на индексацию, к которой вы еще не пришли, при изменении длины массива:
const arr = [[1],[],[2]]
arr.reduceRight((_,c,i) => c.length || !!arr.splice(i,1))
console.log(arr)
Ответ №3:
Проблема в том, что вы пытаетесь выполнить соединение одновременно с использованием filter. Filter не удаляет элементы из вашего массива, он создает новый массив с отфильтрованными данными, как описано здесь:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Вы можете присвоить результат тому же массиву, который предлагается CertainPerformance.
Ответ №4:
Если Splice удален из этого кода, то он не будет удалять элементы. this.arol.splice(this.arol.indexOf(x),1)
здесь он будет проходить через каждый элемент внутри этого массива и x
будет текущей итерацией, которая будет сращиваться из массива, как вы написали метод сращивания. Удалите splice
, он будет работать нормально.