Удалить элемент массива на основе элементов в массиве в качестве индекса

#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);