资讯专栏INFORMATION COLUMN

每日 30 秒 ⏱ 两个数组中的差集

JerryC / 2809人阅读

简介
数组、差集、函数

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

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)
一起成长
在困惑的城市里总少不了并肩同行的 伙伴 让我们一起成长。

如果您想让更多人看到文章可以点个 点赞

如果您想激励小二可以到 Github 给个 小星星

如果您想与小二更多交流添加微信 m353839115

本文原稿来自 PushMeTop

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109033.html

相关文章

  • 每日 30 ⏱ 唯一数据集

    showImg(https://segmentfault.com/img/remote/1460000018795147?w=901&h=501); 简介 数组、对象、唯一、只出现一次、差集 取出两个对象数组中唯一的数据集,即差集。 // 该源码来自于 https://30secondsofcode.org const filterNonUniqueBy = (arr, fn) => arr....

    gityuan 评论0 收藏0
  • 每日 30 ⏱ 根据条件将数组分成两个集合

    简介 数组、拆分 根据条件将数组分成两个集合。 // 该源码来自于 https://30secondsofcode.org const bifurcateBy = (arr, fn) => arr.reduce((acc, val, i) => (acc[fn(val, i) ? 0 : 1].push(val), acc), [[], []]) 代码分析 这个代码主要是利用了 Array.p...

    Dongjie_Liu 评论0 收藏0
  • 每日 30 ⏱ JSON对象数组转换 CSV 表格数据

    简介 数组、对象、CSV、表格、工具 我们在 每日 30 秒之 arrayToCSV 中一起学习了将数组数据转化为 csv 表格数据并导出,那如果是对象数组怎么办呢?小脑袋瓜转得快的同学肯定会说:使用 Array.prototype.map 把需要导出的字段先遍历取出,再使用 arrayToCSV 将其导出为 CSV 数据表格。 可是你有没有想过如果一个对象数组数据非常之大时,使用 Array.p...

    Ajian 评论0 收藏0
  • 每日 30 数组所有数据是否满足某条件

    showImg(https://segmentfault.com/img/remote/1460000018770987?w=900&h=500); 简介 数组、every、any 判断一个数组中是否都满足特定的条件,如果满足则返回 true 否则返回 false。 // 该源码来自于 https://30secondsofcode.org const all = (arr, fn = Boole...

    FullStackDeveloper 评论0 收藏0
  • 每日 30 数组转CSV表格数据

    showImg(https://segmentfault.com/img/remote/1460000018771004?w=900&h=500); 简介 数组、CSV、表格、工具 将一个数组转化为逗号为分割符的字符串(CSV)即表格数据。 // 该源码来自于 https://30secondsofcode.org const arrayToCSV = (arr, delimiter = ,) =...

    nanchen2251 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<