简体   繁体   中英

Delete array element based on elements in an array as index

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.

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM