Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从多维数组中删除重复项_Javascript_Arrays_Multidimensional Array - Fatal编程技术网

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;
}, {});