2016-09-23 69 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"]],如预期。