我有一个数组如下
var myArry = [[1,2], [1,1], [2,0], [1,2], [1,1]]
在这个数组中,我希望找到重复的重复项[1,1], [1,2]
。那么如何在jquery / javascript中执行此操作。
答案 0 :(得分:3)
基本上,您迭代项目并将每个项目推送到新阵列(如果没有它)。问题是如何比较不同的项目,因为像这样的对象比较会产生错误:
[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]]
但只有当item不包含任何对象时才有效。
更新(2016年6月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(pair)))
使用Set的实例仅获取唯一字符串:
新设置(pairs.map(pair => JSON.stringify(pair)))
通过spread operator将
[... new Set(pairs.map(pair => JSON.stringify(pair)))]
将其转换回初始对数组结构:
[... new Set(pairs.map(pair => JSON.stringify(pair)))] .map(pair => JSON.parse(pair))
如果您担心浏览器ES2015支持,请使用Babel或类似工具将其细分为ES5。
答案 1 :(得分:2)
试试这个:
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);
});
});
答案 2 :(得分:1)
循环遍历数组,将第一个和第二个值与每个后续数组条目进行比较。
如果匹配,则将匹配的1份副本存储在新数组中,并在循环后将其作为结果返回。
很抱歉没有代码,但这是不言自明的。
答案 3 :(得分:1)
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 ] ]