实用主义:ES6数组求交并补集

作者: Mr_Treasure | 来源:发表于2017-02-28 18:01 被阅读118次

    前言

    求交集并集不集基本也是属于面试题中的日常,ES5会利用数组的各种遍历方法,函数复杂,不容易理解。ES6中引入新的Set结构,使得这些求集合变得简单起来。

    实现代码

    let arrA = [1,2,3,3];
    let arrB = [2,4,5,6];
    let setA = new Set(arrA);
    let setB = new Set(arrB);
    
    //求并集
    let unionSet = new Set([...setA, ...setB]);
    console.log(Array.from(unionSet));
    
    //求交集
    let intersectionSet = new Set([...setA].filter(x => setB.has(x)));
    console.log(Array.from(intersectionSet));
    
    //求补集
    let differenceSet = new Set([...setA].filter(x => !setB.has(x)));
    console.log(Array.from(differenceSet));
    

    打印结果

    [ 1, 2, 3, 4, 5, 6 ]
    [ 2 ]
    [ 1, 3 ]
    
    

    简单讲解

    Set

    ES6中引入的新结构,不允许有重复的值。通过new Set()生成,可以接收一个数组为参数。有add添加 delete删除 has判断是否拥有等方法

    [...SetA]

    解构方法,将一个具有Symbol.iterator接口(简单理解就是可以通过for of遍历的对象。这也是ES6的方法)的对象解构为数组

    .filter

    数组的遍历方法,返回一个方法内为true的数组值

    x => setB.has(x)

    箭头函数,等价于function(x) { return setB.has(X)};

    Array.from()

    ES6方法,将一个可遍历的对象生成为数组

    相关文章

      网友评论

        本文标题:实用主义:ES6数组求交并补集

        本文链接:https://www.haomeiwen.com/subject/qdtfgttx.html