41

私はjavascriptに2つの配列を持っています -:

var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];

2 つの配列から一意のものを取得し、それらを array3 に配置するメソッド Array3が必要です -:

var array3 = ['1','100'];

手伝ってくれてありがとう。

4

7 に答える 7

7
var unique = [];
for(var i = 0; i < array1.length; i++){
    var found = false;

    for(var j = 0; j < array2.length; j++){ // j < is missed;
     if(array1[i] == array2[j]){
      found = true;
      break; 
    }
   }
   if(found == false){
   unique.push(array1[i]);
  }
}

更新 元の投稿は機能しますが、それほど高速ではありません。この実装ははるかに高速です。この例では配列を 1 つだけ使用しますが、関数では追加の配列を簡単に渡して結合できます。

簡単なエラーチェックのみが行われ、さらに多くのエラーチェックが行われる必要があります。独自の裁量で使用してください。実際の例としてのみ使用してください。

function Unique(array) {
var tmp = [];
var result = [];

if (array !== undefined /* any additional error checking */ ) {
  for (var i = 0; i < array.length; i++) {
    var val = array[i];

    if (tmp[val] === undefined) {
       tmp[val] = true;
       result.push(val);
     }

    }
  }

  return result;
}

var unique = Unique([1, 2, 2, 6, 8, 5, 6, 8]);

さらに、これは Array オブジェクトのプロトタイプとして実装でき、署名を次のように変更できます。

Array.prototype.Unique = function() {
    var array = this;
    ...
}

次のように呼び出すことができます。

var unique = [1, 2, 2, 6, 8, 5, 6, 8].Unique();
于 2013-04-09T21:21:26.847 に答える
0

上記と同様ですが、3 つ以上の配列で動作します

var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];
var i = 0;
var hist = {};
var array3 = [];

buildhist(array1);
buildhist(array2);

for (i in hist) {
    if (hist[i] === 1) {
        array3.push(i);
    }
}

console.log(array3);

function buildhist(arr) {
    var i;
    for (i = arr.length - 1; i >= 0; i--) {
        if (hist[arr[i]] === undefined) {
            hist[arr[i]] = 0;
        }
        hist[arr[i]]++;
    }
}
于 2013-04-09T21:19:37.070 に答える