从多维数组中删除重复项

时间:2016-09-23 21:46:02

标签: javascript arrays multidimensional-array

我发现问题涉及到我遇到的问题,但我还没有找到适用于我的解决方案。我有这个数组:[[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()以摆脱部分重复(只匹配颜色)?

如果我需要提供更多信息,请与我们联系。

4 个答案:

答案 0 :(得分:1)

我会使用np.concatenate(arr).astype(object)循环来填充一个新的唯一数组:

for

答案 1 :(得分:1)

您可以使用带有颜色的哈希表,并使用Array#filter表示所需的项目。



joinedload

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);




答案 2 :(得分: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;
}

这应该以非常低的执行时间解决您的问题。

答案 3 :(得分: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"]]

相关问题