如何在JavaScript中从二维数组中过滤相同的子数组
假设有多个子数组具有无序的整数元素,例如:如何在JavaScript中从二维数组中过滤相同的子数组,javascript,arrays,Javascript,Arrays,假设有多个子数组具有无序的整数元素,例如: [[1,2],[2,1],[3,2,2],[2,1,3],[2,2,3]。 我想对每个子数组中的元素进行排序并删除重复项。因此,在处理这些数据后,结果应如下所示: [[1,2],[2,2,3],[2],[1,2,3]] 如何在JavaScript中高效地执行此操作?您可以尝试以下方法:首先对它们进行排序,然后删除重复项 VarX=[[1,2],[2,1],[3,2,2],[2],[2,1,3],[2,2,3]; 对于(x中的i){ x[i].sort
[[1,2],[2,1],[3,2,2],[2,1,3],[2,2,3]。
我想对每个子数组中的元素进行排序并删除重复项。因此,在处理这些数据后,结果应如下所示:
[[1,2],[2,2,3],[2],[1,2,3]]
如何在JavaScript中高效地执行此操作?您可以尝试以下方法:首先对它们进行排序,然后删除重复项 VarX=[[1,2],[2,1],[3,2,2],[2],[2,1,3],[2,2,3]; 对于(x中的i){ x[i].sort(); } b=uniqBy(x,JSON.stringify) document.getElementById(“数据”).innerHTML=JSON.stringify(b); 功能uniqBy(a,键){ var-seen={}; 返回a.filter(函数(项){ var k=关键(项目); 返回seen.hasOwnProperty(k)?false:(seen[k]=true); }) }
您可以尝试这样做:首先对它们进行排序,然后删除重复项
VarX=[[1,2],[2,1],[3,2,2],[2],[2,1,3],[2,2,3];
对于(x中的i){
x[i].sort();
}
b=uniqBy(x,JSON.stringify)
document.getElementById(“数据”).innerHTML=JSON.stringify(b);
功能uniqBy(a,键){
var-seen={};
返回a.filter(函数(项){
var k=关键(项目);
返回seen.hasOwnProperty(k)?false:(seen[k]=true);
})
}
首先,我们需要对您的子阵列进行排序。这很容易,因为有一个内置的JavaScript函数sort()
:
var-arr=[[1,2]、[2,1]、[3,2,2]、[2]、[2,1,3]、[2,2,3];
arr.forEach(函数(subar){
subar.sort();
});
document.body.innerHTML=JSON.stringify(arr)代码>首先,我们需要对您的子阵列进行排序。这很容易,因为有一个内置的JavaScript函数sort()
:
var-arr=[[1,2]、[2,1]、[3,2,2]、[2]、[2,1,3]、[2,2,3];
arr.forEach(函数(subar){
subar.sort();
});
document.body.innerHTML=JSON.stringify(arr)代码>如果您的数据实际上是整数数组,您可以这样做
// ES6
let data = [[1, 2], [2, 1], [3, 2, 2], [2], [2, 1, 3], [2, 2, 3]];
// non-mutating sort function
function sort(x) { let y = x.slice(0); y.sort(); return y; }
let final = data.map(x => JSON.stringify(sort(x))).reduce((res, x) =>
res.indexOf(x) === -1 ? res.concat(x) : res
, []).map(JSON.parse);
console.log(data);
console.log(final);
// [[1,2],[2,1],[3,2,2],[2],[2,1,3],[2,2,3]]
// [[1,2],[2,2,3],[2],[1,2,3]]
请注意,我的解决方案不会不必要地改变您的输入数据(与此处提供的其他解决方案一样)
如果您需要ES5代码,请点击这里
// ES5
var data = [[1, 2], [2, 1], [3, 2, 2], [2], [2, 1, 3], [2, 2, 3]];
// non-mutating sort function
function sort(x) {
var y = x.slice(0);y.sort();return y;
}
var final = data.map(function (x) {
return JSON.stringify(sort(x));
}).reduce(function (res, x) {
return res.indexOf(x) === -1 ? res.concat(x) : res;
}, []).map(JSON.parse);
console.log(data);
console.log(final);
// [[1,2],[2,1],[3,2,2],[2],[2,1,3],[2,2,3]]
// [[1,2],[2,2,3],[2],[1,2,3]]
如果您的数据实际上是整数数组,您可以这样做
// ES6
let data = [[1, 2], [2, 1], [3, 2, 2], [2], [2, 1, 3], [2, 2, 3]];
// non-mutating sort function
function sort(x) { let y = x.slice(0); y.sort(); return y; }
let final = data.map(x => JSON.stringify(sort(x))).reduce((res, x) =>
res.indexOf(x) === -1 ? res.concat(x) : res
, []).map(JSON.parse);
console.log(data);
console.log(final);
// [[1,2],[2,1],[3,2,2],[2],[2,1,3],[2,2,3]]
// [[1,2],[2,2,3],[2],[1,2,3]]
请注意,我的解决方案不会不必要地改变您的输入数据(与此处提供的其他解决方案一样)
如果您需要ES5代码,请点击这里
// ES5
var data = [[1, 2], [2, 1], [3, 2, 2], [2], [2, 1, 3], [2, 2, 3]];
// non-mutating sort function
function sort(x) {
var y = x.slice(0);y.sort();return y;
}
var final = data.map(function (x) {
return JSON.stringify(sort(x));
}).reduce(function (res, x) {
return res.indexOf(x) === -1 ? res.concat(x) : res;
}, []).map(JSON.parse);
console.log(data);
console.log(final);
// [[1,2],[2,1],[3,2,2],[2],[2,1,3],[2,2,3]]
// [[1,2],[2,2,3],[2],[1,2,3]]
让我们在混合物中加入另一种溶液
var-arr=[[1,2]、[2,1]、[3,2,2]、[2]、[2,1,3]、[2,2,3];
var temp={};
var updated=arr.reduce(函数(prev,arr){
var adj=arr.slice(0.sort();
如果(!temp[adj.join(“,”){
上推;
temp[adj.join(“,”)=true;
}
返回上一个;
},[]);
log(JSON.stringify(更新))代码>让我们在混合物中添加另一种溶液
var-arr=[[1,2]、[2,1]、[3,2,2]、[2]、[2,1,3]、[2,2,3];
var temp={};
var updated=arr.reduce(函数(prev,arr){
var adj=arr.slice(0.sort();
如果(!temp[adj.join(“,”){
上推;
temp[adj.join(“,”)=true;
}
返回上一个;
},[]);
log(JSON.stringify(更新))代码>只需使用以下javascript:
var arr = [[1, 2], [2, 1], [3, 2, 2], [2], [2, 1, 3], [2, 2, 3]];
function sortArray(array) {
var count = array.length;
var sorted = array.sort();
var equal = true;
for (var i=0;i<count;i++) {
if (array[i].length > 1)
array[i].sort();
}
array.sort().sort();
for (var i=0;i<count;i++) {
if (array[i] && array[i+1]) {
for (var j=0, len=array[i].length; j<len; j++) {
if (array[i][j] !== array[i+1][j])
equal = false;
}
if (equal)
array.splice(i,1);
equal = true;
}
}
console.log(array);
}
sortArray(arr);
var-arr=[[1,2]、[2,1]、[3,2,2]、[2]、[2,1,3]、[2,2,3];
函数sortArray(数组){
var count=array.length;
var sorted=array.sort();
var等于真;
对于(变量i=0;i 1)
数组[i].sort();
}
array.sort().sort();
对于(var i=0;i只需使用以下javascript:
var arr = [[1, 2], [2, 1], [3, 2, 2], [2], [2, 1, 3], [2, 2, 3]];
function sortArray(array) {
var count = array.length;
var sorted = array.sort();
var equal = true;
for (var i=0;i<count;i++) {
if (array[i].length > 1)
array[i].sort();
}
array.sort().sort();
for (var i=0;i<count;i++) {
if (array[i] && array[i+1]) {
for (var j=0, len=array[i].length; j<len; j++) {
if (array[i][j] !== array[i+1][j])
equal = false;
}
if (equal)
array.splice(i,1);
equal = true;
}
}
console.log(array);
}
sortArray(arr);
var-arr=[[1,2]、[2,1]、[3,2,2]、[2]、[2,1,3]、[2,2,3];
函数sortArray(数组){
var count=array.length;
var sorted=array.sort();
var等于真;
对于(变量i=0;i 1)
数组[i].sort();
}
array.sort().sort();
对于(var i=0;iso)您想将数组减少为唯一数组?您现在如何进行排序/筛选?因此您想将数组减少为唯一数组?您现在如何进行排序/筛选?