2

Suppose I have an array as

let arr1 = [0,2] This is always sorted

Note: These elements in array represent indexes to be deleted from another array.

I have another array as:

let arrOvj = [1,4,6,7,21,17,12]

I want to delete element of arrObj, based on indexes present in arr1.

So after deletion expected OP should be,

[4,7,21,17,12].

So how can I achieve this.

I tried as:

for(let i=0;i<arr1.length;i++){
   arrObj.splice(arr1[i],1)
}

But this is giving incorrect result.

Example: If arr1=[0]

It deletes first two elements instead of deleting element at index 0 of arrObj.

What other alternative can I follow so it deletes from provided index value only

Please let me know if anyone need any further information.

4
  • 1
    Also, after deleting, the index will change, so you could run arr1 backwards Commented Oct 13, 2021 at 2:30
  • Sorry actually I tried with splice itself but mistakenly typed wrong over here Commented Oct 13, 2021 at 2:31
  • @ariel Sorry I didn't understand, could you please show it in code if possible or any article. Commented Oct 13, 2021 at 2:33
  • Does this answer your question? Remove multiple elements from array in Javascript/jQuery Commented Feb 10, 2022 at 13:46

3 Answers 3

5

You can loop backwards over the indices to delete so that elements will never be shifted into a location that has not been already processed.

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

Sign up to request clarification or add additional context in comments.

1 Comment

@SushantRad Glad to help.
4

Other way of doing it is using the filter method on the array and removing out the corresponding indexes as follows:

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

Comments

2

You can use splice and reduceRight here.

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.