4

次のような配列が1つあります。

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 に答える