6

この問題を解決する多くの投稿を見つけました。

私たちが持っていると仮定します:

array1 = ['A', 'B', 'C', 'D', 'E']; array2 = ['C', 'E'];

2 つの配列を互いに比較し、両方の配列に値が表示されずに 1 つの配列を返す、実績のある高速なソリューションはありますか (ここでは C と E)。望ましい解決策:

array3 = ['A', 'B', 'D']

しかし、次の場合はどうでしょう。

array1 = ['A', 'B', 'C', 'D', 'D', 'E']; array2 = ['D', 'E'];

そして、あなたは次のような解決策を探しています:

array3 = ['A', 'B', 'C', 'D'] // don't wipe out both D's

ここにいくつかのコンテキストがあります:

あなたは文がどのように機能するかを生徒に教えようとしています。あなたは彼らにごちゃごちゃした文章を与えます:

食べた ねこ ねずみ そ の

彼らは答えをタイプし始めます:猫

プロンプトに次のように表示します。

食べた -- マウス - の

現在、私のコードは両方を取り出しています。

これが私が試したことです:
(zsentenceはxsentenceのコピーで、以下のコードで操作され、join()されて画面に表示されます)

for (i=0; i < answer_split.length; i++) {
for (j=0; j < xsentence.length; j++) {
        (function(){
            if (answer_split[i] == xsentence[j]) { zsentence.splice(j,1); return; }
        })();
    }
}
4

2 に答える 2

16

削除する要素の配列を繰り返し処理するだけです。

var array1 = ['A', 'B', 'C', 'D', 'D', 'E'];
var array2 = ['D', 'E'];
var index;

for (var i=0; i<array2.length; i++) {
    index = array1.indexOf(array2[i]);
    if (index > -1) {
        array1.splice(index, 1);
    }
}

ただし、かなり小さいアレイのO(array1.length * array2.length)場合、最新のハードウェアでは、これによってリモートで問題が発生することはありません。

http://jsfiddle.net/mattball/puz7q/

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice

于 2013-01-25T04:35:04.070 に答える