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.
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.
Share Improve this question edited Oct 13, 2021 at 2:30 Sushant Rad asked Oct 13, 2021 at 2:22 Sushant RadSushant Rad 3491 gold badge2 silver badges17 bronze badges 4- 1 Also, after deleting, the index will change, so you could run arr1 backwards – ariel Commented Oct 13, 2021 at 2:30
- Sorry actually I tried with splice itself but mistakenly typed wrong over here – Sushant Rad 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. – Sushant Rad Commented Oct 13, 2021 at 2:33
- Does this answer your question? Remove multiple elements from array in Javascript/jQuery – Heretic Monkey Commented Feb 10, 2022 at 13:46
3 Answers
Reset to default 5You 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);
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);
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);