我有一个数组如下如何找到重复在JavaScript多维数组
var myArry = [[1,2], [1,1], [2,0], [1,2], [1,1]]
在这阵我想找到的复印件,其中[1,1], [1,2]
重复。所以如何在jquery/javascript中做到这一点。
我有一个数组如下如何找到重复在JavaScript多维数组
var myArry = [[1,2], [1,1], [2,0], [1,2], [1,1]]
在这阵我想找到的复印件,其中[1,1], [1,2]
重复。所以如何在jquery/javascript中做到这一点。
循环遍历数组,将第一个和第二个值与每个后续数组条目进行比较。
如果匹配,则将匹配的一个副本存储在一个新数组中,并在循环之后将其作为结果返回。
对不起,没有代码,但这是不言自明的。
试试这个:
function arraysEqual(arr1, arr2) {
if(arr1.length !== arr2.length)
return false;
for(var i = arr1.length; i--;) {
if(arr1[i] !== arr2[i])
return false;
}
return true;
}
var duplicate = [];
$.each(myArry, function(index, value) {
$.each(myArry, function(index2, value2) {
if(arraysEqual(value,value2))
duplicate.push(value);
});
});
var myArray = [[1,2], [1,1], [2,0], [1,2], [1,1]], result = [];
var frequency = myArray.reduce(function(seen, currentItem) {
if (currentItem in seen) {
seen[currentItem] = seen[currentItem] + 1;
} else {
seen[currentItem] = 1;
}
return seen;
}, {});
for (var key in frequency) {
if (frequency[key] > 1) {
result.push(key.split(",").map(function(currentItem) {
return parseInt(currentItem);
}));
}
}
console.log(result);
输出
[ [ 1, 2 ], [ 1, 1 ] ]
基本上,你遍历项目和推动每一个进入新的数组,如果没有它。问题是如何比较不同的项目,因为对象比较喜欢这会产生错误:
[1,2] === [1,2]
// or this
[1,2] == [1,2]
的方法之一是将数据转换成比较的格式,进行迭代,然后变换一切恢复:
var data = [[1,2], [1,1], [2,0], [1,2], [1,1]];
var noDupes = data
.map(function (item) {
return JSON.stringify(item);
})
.reduce(function (out, current) {
if (out.indexOf(current) === -1) out.push(current);
return out;
}, [])
.map(function (item) {
return JSON.parse(item);
});
console.log(data, noDupes);
// [[1, 2], [1, 1], [2, 0], [1, 2], [1, 1]]
// [[1, 2], [1, 1], [2, 0]]
显然,用这种方法你会失去物品的参考。要保留它们,请使用:
var data = [[1,2], [1,1], [2,0], [1,2], [1,1]];
var dataUnique = data.reduce(function (out, item) {
return out.concat(out.filter(function (comp) {
return item.toString() == comp.toString();
}).length ? [] : [item])
}, []);
console.log(data, dataUnique);
// [[1,2], [1,1], [2,0], [1,2], [1,1]]
// [[1,2], [1,1], [2,0]]
但是,它仅适用于物品不包含任何物品的情况。
更新(2016年1月26日):
这里的ES2015版本:
const uniquePairs = pairs => [...new Set(pairs.map(pair => JSON.stringify(pair)))].map(pair => JSON.parse(pair))
uniquePairs([[1,2], [1,1], [2,0], [1,2], [1,1]])
// [[1,2],[1,1],[2,0]]
一步解释步骤:
转换成对比较的字符串。请注意,这里使用的arrow function:
pairs.map(对=> JSON.stringify(对)))
使用的Set一个实例只得到唯一的字符串:
新套装
:(pairs.map(对=> JSON.stringify(一对)))转换经由spread operator设置为阵列
[...新设置(pairs.map(pair => JSON。字符串化(一对)))]
将其转换回初始对阵列结构:
[...新集(pairs.map(对=> JSON.stringify(一对)))] .MAP(对=> JSON.parse(对))
如果担心浏览器ES2015支持,Babel或类似工具transpile它下降到ES5。
jQuery不会帮你在这里。你尝试过什么,你搜索过了吗? – Bergi
Neeeeeed more jQuery !!!!!!!!!!!! – crush
Combine [在JavaScript数组中找到重复值的最简单方法](http://stackoverflow.com/questions/840781/easiest-way-to-find-duplicate-values-in-a-javascript-array)与[比较两个数组在Javascript](http://stackoverflow.com/questions/7837456/comparing-two-arrays-in-javascript) – Bergi