2016-09-23 8 views
0

私はこの問題に触れているような問題を発見しましたが、私にはまだ解決策が見つかりませんでした。私はこの配列を持っています:[[1, red], [2, green], [3, red], [3, blue], [5, green]]と私は[[1, red], [2, green], [3, blue]を返す必要があります。コードを実行するには、配列を調べ、番号ではなく一致する色だけを見つけて、そのインデックス全体を取り除く必要があります。多次元配列から重複を取り除く

私は、このコードは完全一致を探していることを考えている、と私は部分的にしか一致を必要とし、この

var uniqueArray = colors.filter(function(item, pos) { 
return colors.indexOf(item) == pos; 
}); 

のようなものを試してみました。だから、基本的に、私は.filter()を部分的な重複を取り除くためにどのように修正するのですか?

これ以上の情報を提供する必要がある場合はお知らせください。

+0

あなたの質問はちょっと混乱しています。あなたが探している結果に '1'、' 2'、 '3'が必要なのはなぜですか?これらは 'answer.indexOf( 'blue')+ 1'などのようには判別できませんか? – Julie

答えて

1
// Parameter marr: multidimensional array 
function removeSameColors(marr){ 
    var carr = []; 
    var rarr = []; 
    var j = -1; 

    for(var i = 0, l = marr.length; i < l; i++){ 
     if(carr[marr[i][1]] !== true){ 
      carr[marr[i][1]] = true; 
      rarr[++j] = marr[i]; 
     } 
    } 

    return rarr; 
} 

1

私は新しい、ユニークな配列を移入するforループを使用します。

var old_array = [[1, red], [2, green], [3, red], [3, blue], [5, green]], 
    old_count = old_array.length, 
    unique_array = [], check_array = [], i = 0; 

for(; i < old_count; i++) { 
    if (check_array.indexOf(old_array[i][1]) === -1) { 
     check_array.push(old_array[i][1]);// this array is filled with new colors, and used for checking 
     unique_array.push(old_array[i]); 
    } 
} 
+0

私はこれをフィドルで実行しましたが、出力は空の配列でした。https://jsfiddle.net/sxrapxrv/1/ – Andrea

+0

私の謝罪、私は1つの間違いがありました。私のコードを更新しましたが、今はうまくいきます...ここでフィドルを見てください---> https://jsfiddle.net/sxrapxrv/2/ –

1

あなたは色でハッシュテーブルを使用して希望の項目についてArray#filterを使用することができます。非常に低い実行時間とあなたの問題を解決する必要があり

var data = [[1, 'red'], [2, 'green'], [3, 'red'], [3, 'blue'], [5, 'green']], 
 
    result = data.filter(function (a) { 
 
     if (!this[a[1]]) { 
 
      return this[a[1]] = true;      
 
     } 
 
    }, Object.create(null)); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

ハッシュとしてユニークであることが保証されているため、フィルタに渡されるオブジェクト内の固有の色を追跡するだけです。オブジェクトにその色の名前のプロパティがない場合は、それをフィルタから返します。それ以外の場合は、その項目を無視します。

var colors = [[1, "red"], [2, "green"], [3, "red"], [3, "blue"], [5, "green"]]; 

var uniqueArray = colors.filter(function(item, pos) { 
    if (!this.hasOwnProperty(item[1])) { 
     return this[item[1]] = true; 
    } 
    return false; 
}, {}); 

これにより、期待通りにuniqueArray = [[1,"red"],[2,"green"],[3,"blue"]]が得られます。