首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

lodash 去重

Lodash 是一个 JavaScript 实用工具库,提供了许多用于操作数组、对象、数字等的函数。其中,_.uniq_.uniqBy 是用于去重的函数。

基础概念

去重是指从数组中移除重复的元素,使得每个元素只出现一次。

Lodash 去重函数

  1. _.uniq(array)
    • 接受一个数组作为参数。
    • 返回一个新数组,其中包含原数组中的唯一元素。
  • _.uniqBy(array, iteratee)
    • 接受一个数组和一个迭代函数作为参数。
    • 返回一个新数组,其中包含通过迭代函数处理后唯一的元素。

示例代码

使用 _.uniq

代码语言:txt
复制
const _ = require('lodash');

const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = _.uniq(array);

console.log(uniqueArray); // 输出: [1, 2, 3, 4, 5]

使用 _.uniqBy

代码语言:txt
复制
const _ = require('lodash');

const array = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 1, name: 'Alice' }
];

const uniqueArray = _.uniqBy(array, 'id');

console.log(uniqueArray);
// 输出: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]

优势

  1. 简洁性:Lodash 的函数通常比手动编写去重逻辑更简洁。
  2. 性能:Lodash 的实现经过优化,通常比简单的 for 循环更快。
  3. 灵活性_.uniqBy 允许你根据对象的特定属性进行去重,这在处理复杂数据结构时非常有用。

应用场景

  • 数据处理:在处理从数据库或 API 获取的数据时,可能需要去除重复项。
  • 前端开发:在渲染列表或表格时,确保每个项目只显示一次。
  • 日志分析:在分析日志文件时,去除重复的日志条目。

可能遇到的问题及解决方法

问题:为什么 _.uniq 没有按预期去重?

原因

  • 可能是因为数组中的元素不是基本类型(如对象),而是引用类型。Lodash 默认使用严格相等(===)来比较元素,对于对象,这意味着只有当它们引用同一个对象时才会被认为是相同的。

解决方法

  • 使用 _.uniqBy 并提供一个迭代函数,根据对象的某个属性进行去重。
代码语言:txt
复制
const _ = require('lodash');

const array = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 1, name: 'Alice' }
];

const uniqueArray = _.uniqBy(array, item => item.id);

console.log(uniqueArray);
// 输出: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]

通过这种方式,可以确保根据对象的特定属性进行正确的去重。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java中对List去重, Stream去重

问题 当下互联网技术成熟,越来越多的趋向去中心化、分布式、流计算,使得很多以前在数据库侧做的事情放到了Java端。今天有人问道,如果数据库字段没有索引,那么应该如何根据该字段去重?...你需要知道HashSet如何帮我做到去重了。换个思路,不用HashSet可以去重吗?最简单,最直接的办法不就是每次都拿着和历史数据比较,都不相同则插入队尾。而HashSet只是加速了这个过程而已。...,那么是如何去重的呢?...在本题目中,要根据id去重,那么,我们的比较依据就是id了。...回到最初的问题,之所以提这个问题是因为想要将数据库侧去重拿到Java端,那么数据量可能比较大,比如10w条。

8.8K70
  • Flink去重第四弹:bitmap精确去重

    Flink去重第一弹:MapState去重 Flink去重第二弹:SQL方式 Flink去重第三弹:HyperLogLog去重 关于hyperloglog去重优化 不得不掌握的三种BitMap 在前面提到的精确去重方案都是会保存全量的数据...,但是这种方式是以牺牲存储为代价的,而hyperloglog方式虽然减少了存储但是损失了精度,那么如何能够做到精确去重又能不消耗太多的存储呢,这篇主要讲解如何使用bitmap做精确去重。...ID-mapping 在使用bitmap去重需要将去重的id转换为一串数字,但是我们去重的通常是一串包含字符的字符串例如设备ID,那么第一步需要将字符串转换为数字,首先可能想到对字符串做hash,但是hash...UDF化 为了方便提供业务方使用,同样需要将其封装成为UDF, 由于snowflake算法得到的是一个长整型,因此选择了Roaring64NavgabelMap作为存储对象,由于去重是按照维度来计算,...关于去重系列就写到这里,如果您有不同的意见或者看法,欢迎私信。 —END—

    2.5K10

    Flink去重第一弹:MapState去重

    去重计算应该是数据分析业务里面常见的指标计算,例如网站一天的访问用户数、广告的点击用户数等等,离线计算是一个全量、一次性计算的过程通常可以通过distinct的方式得到去重结果,而实时计算是一种增量、...此篇介绍如何通过编码方式实现精确去重,以一个实际场景为例:计算每个广告每小时的点击用户数,广告点击日志包含:广告位ID、用户设备ID(idfa/imei/cookie)、点击时间。...去重逻辑 自定义Distinct1ProcessFunction 继承了KeyedProcessFunction, 方便起见使用输出类型使用Void,这里直接使用打印控制台方式查看结果,在实际中可输出到下游做一个批量的处理然后在输出

    1.6K30

    java List去重,根据多个字段属性去重

    问题描述:  如果我有一个A类,里面有5个字段,对于数组List list,我想根据其中的2个字段来去重,如果2个字段都是一样的,只取最新的一条数据即可。...实现思路: 如果你有一个A类,并且想根据其中的两个字段进行去重,只保留最新的一条数据,那么你可以不定义一个新的类PersonId。在这种情况下,你可以使用Java中的Map来达到去重的效果。...最后,你只需要从Map中获取值,就可以得到根据这两个字段去重后的最新数据。...List uniqueDataList = new ArrayList(map.values()); // 打印去重后的数据列表...如果你希望根据其他规则进行去重,可以根据需要进行修改。 应该还有其他的方法。

    1.2K10
    领券