• js 差集


    let arr1 = [1,2,3,4,5]

    let arr2 = [3,4,6,7]

    差集

    方法一

    function difference(arr1, arr2) {
        let diff = [];
        let tmp = arr2;
        arr1.forEach((val1, i) => {
            if (arr2.indexOf(val1) < 0) {
               diff.push(val1);
            } else {
               tmp.splice(tmp.indexOf(val1), 1);
            }
        });
        return diff.concat(tmp)
    }
    console.log(
    difference(arr1, arr2)) // [1,2,5,6,7]

    方法二

    ES6中新增的一个Array.from方法,用于将类数组对象和可遍历对象转化为数组,结合Set结构

    let aSet = new Set(arr1)
    let bSet = new Set(arr2)
    let difference = Array.from(new Set(arr1.concat(arr2).filter(v => !aSet.has(v) || !bSet.has(v)))) // [1,2,5,6,7]

    分析:

    1. 先使用 set结构 对数组自身去重,并保存起来,这时保存的是set对象

    2. arr1.concat(arr2)  把两个数组合并,再使用 filter 过滤

    3.  v => !aSet.has(v) || !bSet.has(v) 过滤条件

    aSet和bSet都是set对象,可以使用has过滤 (has() 方法返回一个布尔值来指示对应的值value是否存在Set对象中。)

    "!aSet.has(v)  ||  !bSet.has(v) "这里取 ‘!非’ 和 ‘ || 或’  是为了过滤同时存在两个数组的值 

    4. 再使用 "new Set()" 去重

    5. 使用"Array.from" 把Set对象 转化为数组

    参考链接: https://blog.csdn.net/qq_35430000/article/details/88046136

  • 相关阅读:
    CSS3旋转动画
    CSS3的动画属性
    CSS选择器
    JS事件委托
    js 轮播图效果
    JS事件冒泡和事件捕获
    JS自定义播放器
    js闭包for循环只执行最后一个值得解决方法
    交通红绿灯
    汉明距
  • 原文地址:https://www.cnblogs.com/wjz-page/p/13037201.html
Copyright © 2020-2023  润新知