代码块 -- 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]]
    
posted @ 2021-09-01 12:25  MerLin97  阅读(107)  评论(0编辑  收藏  举报