2016-09-23 5 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

사과, 나는 실수하지 않았다. 내 코드를 업데이트했는데 이제는 잘 작동합니다 ... 여기 피들을 봅니다. ---> 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"]]이 표시됩니다.