0

arr1 是一个整数数组。arr2 包含我希望从 arr1 中删除的元素的索引列表。

所以这是我的 JS 函数:

function deletion()
{
        var arr3=[];
        var arr1= [2,3,4,5,6,7,8,11,22];
        console.log(arr1);
        var arr2 = [4,0,1];

        for(var i=0;i<arr2.length;i++)
    {
    arr3.push(arr1[arr2[i]]);
    }
    for(var j=0;j<arr3.length;j++)
    {
     arr1.splice(arr1.indexOf(arr3[j]),1);
    }
        console.log(arr1,"array1");
}

这工作正常,但现在的要求是:我需要使用更有效的方式。arr3 不应使用,即我不想使用另一个新数组并将元素推入其中然后循环遍历它。我希望在不使用新数组的情况下实现这一点。

有没有办法实现这一点?不应该使用任何库,这只能通过 Java Script 来完成。

如果问题很荒谬,请道歉。这是我必须完成的任务。

4

3 回答 3

1
var arr1= [2,3,4,5,6,7,8,11,22];
var arr2 = [4,0,1];
arr2 = arr2.sort().reverse();
for(var i = 0; i < arr2.length; i++){
    arr1.splice(arr2[i],1);
}
console.log(arr1);
于 2013-11-01T10:15:07.760 回答
1
function deletion()
{
    var arr1= [2,3,4,5,6,7,8,11,22];
    console.log(arr1);
    var arr2 = [4,0,1];
    arr2 .sort(function(a,b){return a>b?-1:1});
    for(var i=0;i<arr2.length;i++)
    {
       arr1.splice(arr2[i],1);
    }
    console.log(arr1,"array1");
}
于 2013-11-01T10:19:18.323 回答
0

你可以使用Array.splice这种效果,由于双循环的复杂性,它可能不适合这种形式,但你明白了......

var arr1= [2,1,3,4,5,6,7,8,11,22],
    arr2 = [4,0,1];

for (var i in arr1) {
    for (var j in arr2) {
        if (arr1[i] == arr2[j])
            arr1.splice(i, 1);
    } 
}
于 2013-11-01T10:09:06.230 回答