#javascript #arrays
Вопрос:
Предположим, у меня есть массив в виде
let arr1 = [0,2] This is always sorted
Примечание.Эти элементы в массиве представляют индексы, которые должны быть удалены из другого массива.
У меня есть еще один массив, как:
let arrOvj = [1,4,6,7,21,17,12]
Я хочу удалить элемент arrObj
на основе индексов, присутствующих в arr1.
Поэтому после удаления ожидаемая операция должна быть,
[4,7,21,17,12].
Итак, как я могу этого достичь?
Я пытался, как:
for(let i=0;i<arr1.length;i ){
arrObj.splice(arr1[i],1)
}
Но это дает неверный результат.
Пример: Если arr1=[0]
Он удаляет первые два элемента вместо удаления элемента с индексом 0 arrObj.
Какой другой альтернативе я могу следовать, чтобы она удалялась только из предоставленного значения индекса
Пожалуйста, дайте мне знать, если кому-нибудь понадобится дополнительная информация.
Комментарии:
1. Кроме того, после удаления индекс изменится, так что вы сможете запустить arr1 в обратном направлении
2. Извините, на самом деле я пытался с самим сращиванием, но по ошибке набрал здесь неправильно
3. @ariel Извините, я не понял, не могли бы вы, пожалуйста, показать это в коде, если возможно, или в любой статье.
Ответ №1:
Вы можете выполнить обратный цикл по индексам для удаления, чтобы элементы никогда не перемещались в место, которое еще не было обработано.
let arr1 = [0,2]
let arrOvj = [1,4,6,7,21,17,12]
for(let i = arr1.length - 1; i >= 0; i--) arrOvj.splice(arr1[i], 1);
console.log(arrOvj);
Комментарии:
1. @SushantRad Рад помочь.
Ответ №2:
Другой способ сделать это-использовать метод фильтра для массива и удалить соответствующие индексы следующим образом:
let arrObj = [1,4,6,7,21,17,12]
let indexes = [0,2]
let newArr = arrObj.filter((ele, index) => !indexes.includes(index));
console.log(newArr);
Ответ №3:
Вы можете использовать splice и reduceRight здесь.
let arr1 = [0, 2];
let arrOvj = [1, 4, 6, 7, 21, 17, 12];
arrOvj = arr1.reduceRight((a, c) => (a.splice(c, 1), a), arrOvj);
console.log(arrOvj);