每日 30 秒之 difference

栏目: IT资讯 · 发布时间: 7年前

内容简介:根据给出的函数找出两个数组中的差集。这段代码使用了ES2015中定义的有的同学会问了那为啥要在这把 b 转化为

简介

根据给出的函数找出两个数组中的差集。

const differenceBy = (a, b, fn) => {
  const s = new Set(b.map(fn));
  return a.filter(el => !s.has(fn(el)));
};

代码分析

这段代码使用了ES2015中定义的 Set 对象 。 Set 对象 的值的特点是不含有重复的值,这个特性可以用来实现对一个数组的去重。

有的同学会问了那为啥要在这把 b 转化为 Set 对象 呢,直接用 Array.prototype.indexOf 不是也可以实现查找数组中的值。实际上 Set.prototype.has 方法的效率会比 Array.prototype.indexOf 高一点。

Set 对象 还有很多有用的方法可以到 MDN web docs 查看。

使用场景

找出两个公司职员中工作不同的职员,这里只是简单模拟一个小场景真实开发中往往会经过更多的判断和归集。

const superHeroCompany = [
    { name: 'xiaoer', job: '程序员' },
    { name: 'xiaosi', job: '图书管理员', },
    { name: 'menty', job: '会计' },
]

const happyCompany = [
    { name: 'xiaofu', job: '程序员' },
    { name: 'panghu', job: '会计' },
]

const diffUsers = differenceBy(superHeroCompany, happyCompany, v => v.job)

相似代码

找出两个数组当中的差集,要注意的是对象的值一样并不是两个对象就相等了,而是对象的指向一样时才会相等。

// 该源码来自于 https://30secondsofcode.org
const difference = (a, b) => {
  const s = new Set(b);
  return a.filter(x => !s.has(x));
};

根据比较函数 comp 的返回值来过滤两个数组中的差集。

// 该源码来自于 https://30secondsofcode.org
const differenceWith = (arr, val, comp) => arr.filter(a => val.findIndex(b => comp(a, b)) === -1)

打赏&联系

如果您感觉有收获,欢迎给我打赏,以激励我输出更多的优质内容。

每日 30 秒之 difference

本文原稿来自 PushMeTop


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

图论导引

图论导引

韦斯特 / 机械工业出版社 / 2006-2 / 65.00元

图论起源于著名的哥尼斯堡七桥问题,在计算科学、社会科学和自然科学等各个领域都有广泛应用。本书是本科生或研究生一学期或两学期的图论课程教材。内容全面,证明与应用实例并举,不仅包括对证明技巧的讨论、1200多道习题、400多幅插图以及许多例题,而且对所有定理都给出了详细完整的证明。可以作为高等院校数学系本科生和研究生、计算机专业和其他专业研究生的图论课程教材,也可以作为有关教师和工程技术人员的参考书。......一起来看看 《图论导引》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具