代码块 -- diff
问题 & 解答 非原创
Q: 写一个diff方法, 用于比较两个数组, 返回两数组中不同的部分; 要求考虑算法性能, 使用es6/es7语法, 不能使用第三方类库
console.log(diff([1, 2], [2, 1])); // => []
console.log(diff([1, 2, 1], [2, 1, 1, 2])); // => []
console.log(diff([1, 2, 3], [4, 3, 1])); // => [2, 4]
console.log(diff([1, [2, 3], 4], [[1 ,2], [2, 3], 3, 4])); // => [1, [1, 2], 3]
console.log(diff([[1, 2, 3], [3, 2, 1], 1, 2, 3], [2, 3, 1])); // => [[1, 2, 3], [3, 2, 1]]
-
代码
function diff(a = [], b = []) { a = Array.from(new Set(a)); b = Array.from(new Set(b)); const arr = a.concat(b); const m = new Map(); arr.map((item) => { const itemJson = JSON.stringify(item); if (!m.has(itemJson)) m.set(itemJson, item); else m.delete(itemJson); }); return Array.from(m.values()); } console.log(diff([1, 2], [2, 1])); // => [] console.log(diff([1, 2, 1], [2, 1, 1, 2])); // => [] console.log(diff([1, 2, 3], [4, 3, 1])); // => [2, 4] console.log(diff([1, [2, 3], 4], [[1 ,2], [2, 3], 3, 4])); // => [1, [1, 2], 3] console.log(diff([[1, 2, 3], [3, 2, 1], 1, 2, 3], [2, 3, 1])); // => [[1, 2, 3], [3, 2, 1]]
本文来自博客园,作者:MerLin97,转载请注明原文链接:https://www.cnblogs.com/merlin97/p/15214124.html