4

我有一个这样的数组:

peoples = ['dick', 'jane', 'harry', 'debra', 'hank', 'frank' .... ]

一个包含这样的键:

keys  = [1, 6, 3, 12 .... ]

现在我可以写这样的东西:

var peoplesStripedOfKeyPostions = [];

for(i = 0; i < peoples.length; i++){
    for(j = 0; j < keys.length; j++){
        if( i !== keys[j]){
            peoplesStripedOfKeyPostions.push( peoples[i] );
        }
    }        
}

如果你不知道,我需要生成一组人员,这些人员在数组键中定义的某些位置被剥夺了人员。我知道必须有一个漂亮而有效的方法来做到这一点,但我当然想不出。(阵列管理不是我的强项)。

你知道更好的方法吗?(如果我得到多个有效的答案,jsperf 将确定获胜者。)

4

2 回答 2

6
people.filter(function(x,i){return badIndices.indexOf(i)==-1})

如果badIndices数组很大,这将变得低效。一个更有效(尽管不太优雅)的版本是:

var isBadIndex = {};
badIndices.forEach(function(k){isBadIndex[k]=true});

people.filter(function(x,i){return !isBadIndex[i]})

注意:您不能使用名为的变量keys,因为这是一个内置函数

于 2012-09-07T03:55:18.507 回答
1

您可以按索引从数组中删除条目,然后收集剩下的人。

keys.forEach(function(i) { delete people[i]; });

peopleRemaining = Object.keys(people).map(function(i) { return people[i]; });

请注意,这会修改原始people数组。

于 2012-09-07T17:33:06.133 回答