如何找到阵列和阵列阵列之间的差异
问题描述:
x = [1, 2,3, 5]; y = [1, [2], [3, [[4]]],[5,6]]));
我必须找到这两个阵列之间的区别。如何找到阵列和阵列阵列之间的差异
function arr_diff (a1, a2) {
var a = [], diff = [];
for (var i = 0; i < a1.length; i++) {
a[a1[i]] = true;
}
for (var i = 0; i < a2.length; i++) {
if (a[a2[i]]) {
delete a[a2[i]];
} else {
a[a2[i]] = true;
}
}
for (var k in a) {
diff.push(k);
}
return diff;
};
这是我试过的,但因为它有阵列数组,所以这不适合我。 任何人都可以请建议帮助。
谢谢。
答
你可以只扁平化阵列找到差异
function arr_diff(a1, a2) {
a1 = a1.toString().split(',');
a2 = a2.toString().split(',');
\t
if (a1.length < a2.length) {var t = a1; a1 = a2; a2 = t};
return a1.filter(x => (!a2.includes(x))).map(Number);
}
var x = [1, 2,3, 5];
var y = [1, [2], [3, [[4]]],[5,6]];
var r = arr_diff(x,y);
console.log(r);
答
你一定要拼合所有你想要使用的功能比较阵列发现here之前。 压扁他们后,您可以使用函数对它们进行比较发现here
let x = [1, 2,3, 5];
let y = [1, [2], [3, [[4]], [5,6] ]]
const flatten = list => list.reduce(
(a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []
)
const difference = (arr1,arr2) => {
\t arr1 = flatten(arr1)
\t arr2 = flatten(arr2)
\t
\t return arr1.filter(e => arr2.indexOf(e) === -1)
.concat(arr2.filter(e => arr1.indexOf(e) === -1))
}
console.log(difference(x,y)) // [4,6]
你期待什么结果?我想知道,你是用'[2]'来识别'2',等等。 – arbuthnott
你是什么意思?找到差异?因为这两个阵列显然非常不同。第二个包含数组数组。您的功能的预期输出是什么?是'[4,6]'吗?还有别的吗? –
我期待差异作为例子['1','2']和['3','1'] o/p是2 – MMR