假设我有一个数组作为
let arr1 = [0,2] This is always sorted
注意:数组中的这些元素表示要从另一个数组中删除的索引。
我有另一个数组作为:
let arrOvj = [1,4,6,7,21,17,12]
我想删除arrObj的元素,基于arr1中存在的索引。
因此,删除后预期的OP应该是,
[4,7,21,17,12].
那么我该如何做到这一点呢。
我试过:
for(let i=0;i<arr1.length;i++){
arrObj.splice(arr1[i],1)
}
但这给出了不正确的结果。
示例:如果arr1=[0]
它删除前两个元素,而不是删除arrObj索引0处的元素。
我还能遵循什么其他选择,以便它只从提供的索引值中删除
如果有人需要任何进一步的信息,请告诉我。
您可以在要删除的索引上向后循环,这样元素就永远不会转移到尚未处理的位置。
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);
另一种方法是对数组使用filter方法,并删除相应的索引,如下所示:
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);
您可以在此处使用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);