我发现问题涉及到我遇到的问题,但我还没有找到适用于我的解决方案。我有这个数组:[[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)
我会使用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"]]
。