如何在 Javascript 中从二维数组中过滤整数和字符串的重复子数组



我收到一个整数和字符串的二维数组,我想从中删除重复项:

原始数组 =[["admin", 2, "regular"], ["customer", "regular"], ["regular", "customer"], [1], ,["admin"], [1], ["admin"]

预期成果 =[["admin", 2, "regular"], ["customer", "regular"], [1], ["admin"]]

请问我如何在Javascript中做到这一点?

你的数组(和它的子数组(是否被重新排序有关系吗?如果没有,则:

var array = [["admin", 2, "regular"], ["customer", "regular"], ["regular", "customer"], [1],["admin"], [1], ["admin"]];
array = array.map(x => x.sort()).sort();
var uniqueArray = [];
uniqueArray.push(array[0]);
for (var i = 1; i < array.length; i++){
if (JSON.stringify(array[i]) != JSON.stringify(array[i-1])){
uniqueArray.push(array[i]);
}
}
console.log(uniqueArray);

您可以从内部数组中对副本进行排序,并构建一个字符串,并在过滤时检查哈希表。

var array = [["admin", 2, "regular"], ["customer", "regular"], ["regular", "customer"], [1], ["admin"], [1], , ["admin"]],
object = Object.create(null),
unique = array.filter(function (a) {
var b = a.slice().sort().join('|');
return !object[b] && (object[b] = true)
});

console.log(unique);
.as-console-wrapper { max-height: 100% !important; top: 0; }

这里有一个可能对你有帮助的算法。它不是编写的JavaScript。 它并没有区分["客户","常规"]和["常规","客户"],但是您有一个大致的想法:

var newArray = [];
for(x in originalArray) { //travel in the original array
var flag = 1; //flag indicating if x is already in newArray
for(y in array) { 
if(y == x) flag = 0; //if x already belongs to newArray
}
if(flag==1) newArray += x; //add if not already in newArray
flag = 1; //reset value of flag
}

基本上,您创建一个新数组,其中仅添加尚未属于它的值。祝你好运:)

最新更新