内容简介:根据给出的函数找出两个数组中的差集。这段代码使用了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)
打赏&联系
如果您感觉有收获,欢迎给我打赏,以激励我输出更多的优质内容。
本文原稿来自 PushMeTop
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员的算法趣题
[ 日] 增井敏克 / 绝 云 / 人民邮电出版社 / 2017-7 / 55.00元
本书是一本解谜式的趣味算法书,从实际应用出发,通过趣味谜题的解谜过程,引导读者在愉悦中提升思维能力、掌握算法精髓。此外,本书作者在谜题解答上,通过算法的关键原理讲解,从思维细节入手,发掘启发性算法新解,并辅以Ruby、JavaScript等不同语言编写的源代码示例,使读者在算法思维与编程实践的分合之间,切实提高编程能力。 本书适合已经学习过排序、搜索等知名算法,并想要学习更多有趣算法以提升编程技巧......一起来看看 《程序员的算法趣题》 这本书的介绍吧!