Javascript 从多维数组中删除重复项
我发现了一些与我所面临的问题类似的问题,但我还没有找到一个适合我的解决方案。我有一个数组:Javascript 从多维数组中删除重复项,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我发现了一些与我所面临的问题类似的问题,但我还没有找到一个适合我的解决方案。我有一个数组:[[1,红色],[2,绿色],[3,红色],[3,蓝色],[5,绿色]]我需要它返回[[1,红色],[2,绿色],[3,蓝色]。我需要代码做的是遍历数组,只找到匹配的颜色,而不是数字,然后去掉整个索引 我试过这样的东西 var uniqueArray = colors.filter(function(item, pos) { return colors.indexOf(item) == pos; });
[[1,红色],[2,绿色],[3,红色],[3,蓝色],[5,绿色]]
我需要它返回[[1,红色],[2,绿色],[3,蓝色]
。我需要代码做的是遍历数组,只找到匹配的颜色,而不是数字,然后去掉整个索引
我试过这样的东西
var uniqueArray = colors.filter(function(item, pos) {
return colors.indexOf(item) == pos;
});
我认为这段代码正在搜索完全匹配,我只需要部分匹配。因此,基本上,我应该如何修改.filter()
以消除部分重复(仅匹配颜色)
如果需要提供更多信息,请告诉我。我将使用
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]);
}
}
var old_数组=[[1,红色],[2,绿色],[3,红色],[3,蓝色],[5,绿色]],
old_count=old_array.length,
唯一数组=[],检查数组=[],i=0;
对于(;i
您可以使用具有颜色的哈希表,并将其用于所需项目
var数据=[[1'红色']、[2'绿色']、[3'红色']、[3'蓝色']、[5'绿色'],
结果=数据过滤器(函数(a){
如果(!this[a[1]]){
返回此[a[1]]=true;
}
},Object.create(null));
console.log(结果);
.as控制台包装{最大高度:100%!重要;顶部:0;}
//参数marr:多维数组
函数removeSameColors(marr){
var-carr=[];
var-rarr=[];
var j=-1;
对于(变量i=0,l=marr.length;i
这将解决执行时间非常短的问题。我只会跟踪传递到筛选器的对象中的唯一颜色,因为作为哈希,它保证是唯一的。如果对象没有该颜色名称的属性,它将从筛选器返回该属性。否则,它将忽略该项
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,“红色”]、[2,“绿色”]、[3,“蓝色”]]
。您的问题有点让人困惑。为什么您在搜索的结果中需要1
、2
和3
?这些不能被确定为答案。indexOf('blue'))+1
或类似的东西?我在fiddle上运行了这个,输出是一个空数组。很抱歉,我有一个错误没有发现。我更新了我的代码,现在它可以正常工作了…请参阅这里的fiddle-->
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;
}, {});