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

Lodash uniqBy函数不从对象数组返回唯一数据

_.uniqBy 是 Lodash 库中的一个函数,用于根据提供的迭代器(iteratee)函数从数组中返回唯一的元素。当你有一个对象数组并且想要根据对象的某个属性去除重复项时,这个函数非常有用。

基础概念

_.uniqBy 函数接受两个参数:

  1. array (Array): 需要去重的数组。
  2. iteratee (Function|Object|string): 用来计算每个元素的键值的函数或者属性名。

优势

  • 简洁高效:Lodash 的 _.uniqBy 函数提供了一种简洁的方式来处理数组去重,尤其是对于对象数组。
  • 灵活性:你可以根据任何对象属性或者通过自定义函数来去重。

类型

  • 对象数组:当你有一个包含多个对象的数组,并且想要根据对象的某个属性去除重复项时,可以使用 _.uniqBy

应用场景

假设你有一个用户列表,每个用户是一个对象,包含 idname 属性,你想要去除名字相同的重复用户。

示例代码

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

const users = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Alice' },
  { id: 4, name: 'Charlie' }
];

// 使用 _.uniqBy 去重
const uniqueUsers = _.uniqBy(users, 'name');

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

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

如果你发现 _.uniqBy 没有返回唯一的数据,可能是以下原因:

  1. 迭代器函数或属性名错误:确保你传递给 iteratee 的是一个有效的函数或者对象属性名。
  2. 对象引用问题:如果你的对象数组中的对象是通过引用共享的,那么即使它们的属性相同,_.uniqBy 也可能无法正确去重。确保每个对象都是唯一的实例。

解决方法

  • 确保 iteratee 正确无误。
  • 如果对象引用导致问题,可以尝试创建对象的深拷贝,然后再应用 _.uniqBy
代码语言:txt
复制
const deepCopy = (obj) => JSON.parse(JSON.stringify(obj));

const usersCopy = users.map(deepCopy);
const uniqueUsersCopy = _.uniqBy(usersCopy, 'name');

参考链接

如果你在使用腾讯云的产品时遇到类似问题,可以考虑使用腾讯云的云函数(SCF)来运行你的 JavaScript 代码,这样可以利用 Lodash 库的功能,同时享受腾讯云的高性能计算服务。

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

相关·内容

lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的

先来看【原始数组】和【最终数组】对比: 标题有点绕,总的来说,是一个数组,根据以下步骤拆解: ① 根据两个不同字段 “label” 、”type” 分别做筛选,-> 生成两个 对象 obj_label...① 使用 groupBy(),第一个参数是原始数组,第二个值是根据“关键词”做筛选,在这里需要根据 label 和 type 这两个值分别做筛选,生成两个键值对象 lodash.groupBy(res_data..., "label") lodash.groupBy(res_data, "type") ② 使用 toPairsIn() 将对象转为数组,参数是 Object 对象 lodash.toPairsIn...map() 将数组转为 Object 键值对 对象 lodash.toPairsIn( lodash.groupBy(res.data.result, "label")...props 的对象 lodash.uniqBy( lodash.concat( lodash.toPairsIn( lodash.groupBy(

5K40
  • 5 个 JS 数组技巧可提高你的开发技能

    唯一值 在开发者,我们经常需要过滤重复的值,这里提供几种方式来过滤数组的重复值。 使用 Set 对象 使用 Set() 函数,此函数可与单个值数组一起使用。...使用 loadsh 的 lodash 方法 import {uniqBy} from 'lodash' const data = [ {id: 1, name: 'Lemon'}, {id...按属性对 对象数组 进行排序 我们知道 JS 数组中的 sort 方法是按字典顺序进行排序的,所以对于字符串类, 该方法是可以很好的正常工作,但对于数据元素是对象类型,就不太好使了,这里我们需要自定义一个排序方法...在filter 方法中,我们有一个简单的比较操作,但是它将返回的是一个数组,而是我们想要是根据给定条件从数组中获得单个对象。...为了解决这个问题,我们可以使用 find函数数组中找到确切的元素并返回对象,这里我们不需要使用if-else语句来检查元素是否满足条件。

    1.2K11

    php json_encode()函数返回对象数组问题

    php json_encode() 函数格式化数据时会根据不同的数组类型格式化不同类型的json数据 索引数组时 <?...php $arr = []; print_r(json_encode($arr)); //输出 [] 索引数组时生成的是数组类型数据,关联数组时生成的是对象类型的数据,空数组返回的是数组类型。...但是当碰到同一个字段返回数组可能是关联数组也可能是空数组时,就会在app端出现数据类型不一致的问题,解决方式有两种: 一,使用 json_encode的 JSON_FORCE_OBJECT 模式 <?...php $arr = []; print_r(json_encode($arr,JSON_FORCE_OBJECT)); //输出 {} 但是这种存在一个问题,它会把所有的数据都以对象的方式返回,包括索引数组...php $arr = new ArrayObject(); print_r(json_encode($arr)); //输出 {} 到这里我们可以随意的控制返回的json数据数据的类型啦!!!!

    3.6K10

    Lodash那些“多余”和让人眼前一亮的 API

    }] } } xor( 创建一个给定数组唯一值的数组 ) 眼前二亮的API remove(元素筛选,分到两个数组) sortedUniq (去重,排序) takeRightWhile ( 从array...数组的最后一个元素开始提取元素,直到 predicate 返回假值 ) uniqBy (去重,排序) 四、集合 Collection Collection很多API都能让人眼前一亮,在实际开发中都能得到应用...forEach(遍历数组对象) | forEachRight(反序遍历数组对象) // 遍历数组有点多余 lodash([1, 2]).forEach((val) => { console.log...) partition (站队:根据回调返回值,返回 [ 返回值为true的item数组 , 返回值为false的item数组]) reject (找茬:找出不符合条件的item集合,类似!...,'a.b.c.d')) // true console.log(lodash.has(obj2,'a.b.c.d')) // false invert :key-value反转,返回对象,新对象为旧对象

    3.5K10

    前端应该要掌握的几种手写代码实现

    (context)的属性发生冲突,使用Symbol类型作为唯一值 将函数作为传入的上下文(context)属性执行 函数执行完成后删除该属性 返回执行结果 Function.prototype.myCall...,未作判断(有兴趣可查阅一下如何判断类数组) 模拟bind 使用 call / apply 指定 this 返回一个绑定函数返回的绑定函数作为构造函数被new调用,绑定的上下文指向实例对象 设置绑定函数的...把this绑定到空对象 使空对象的__proto__指向构造函数的原型(prototype) 执行构造函数,为空对象添加属性 判断构造函数返回值是否为对象,如果是对象,就使用构造函数返回值,否则返回创建的对象...this继承自父级上下文,指向触发事件的目标元素 事件被触发时,传入event对象 传入leading参数,判断是否可以立即执行回调函数,不必要等到事件停止触发后才开始执行 回调函数可以有返回值,需要返回执行结果...方法 使用时间戳 使用定时器 开始触发时 立刻执行 n秒后执行 停止触发后 不再执行事件 继续执行一次事件 数组去重 const uniqBy = (arr, key) => { return

    80730

    推荐一波实用高效的 NPM 工具包,总有几款适合你

    实用工具 Lodash lodash[1]是一套现代 JavaScript 实用程序库,提供模块化、性能与多种附加功能。可提供关于 JavaScript 数组对象及其他数据结构的多种实用功能。...我常用的一些方法如下 // -----------------------------深度比较两个对象的值是否全相等 import { isEqual, cloneDeep, uniqBy, sortBy...{ 'user': 'fred', 'age': 40 }, { 'user': 'fred', 'age': 48 }, ]; */ qs `qs`[2] 处理 URL 查询字符串,支持内嵌对象数组...---- ‍♂️ 数据生成器 Uuid uuid[14]是一个便捷的微型软件包,能够快速生成更为复杂的通用唯一标识符(UUID)。...jest-office 安装及示例 yarn add --dev jest 测试sum函数,这个函数的功能是两数相加。

    4.2K40

    【JavaScript】函数 ⑤ ( return 关键字终止函数 | return 关键字返回一个值 | return 关键字返回多个值 - 返回数组对象 )

    一、JavaScript 函数返回值 1、return 关键字终止函数 return 关键字 除了 返回 函数返回值 功能之外 , 还具有 终止 函数执行 的作用 , return 关键字后面的语句..." + ret); 执行结果 : 只返回了最后一个值 ; 3、return 关键字返回多个值 - 返回数组对象...如果需要返回多个值 , 可以 使用 return 关键字 返回一个数组 ; JavaScript 中的数组 相当于 Java 中的 ArrayList , 可以动态改变元素个数 ; 代码示例 : 在下面的代码中..., add 函数返回一个数组 [num1, num2, num1 + num2] , 此时数组对象被当做一个返回值对待 , 因此 可以使用 return 关键字返回 ; <!...: " + ret); 执行结果 : 返回了 一个数组 , 数组中有 3 个值 ;

    16610

    让我告诉你一些强无敌的 NPM 软件包(超实用,收藏!)

    实用工具 Lodash lodash[1]是一套现代 JavaScript 实用程序库,提供模块化、性能与多种附加功能。可提供关于 JavaScript 数组对象及其他数据结构的多种实用功能。 ?...我常用的一些方法如下 // -----------------------------深度比较两个对象的值是否全相等 import { isEqual, cloneDeep, uniqBy, sortBy...{ 'user': 'fred', 'age': 40 }, { 'user': 'fred', 'age': 48 }, ]; */ qs `qs`[2] 处理 URL 查询字符串,支持内嵌对象数组...♂️ 数据生成器 Uuid uuid[14]是一个便捷的微型软件包,能够快速生成更为复杂的通用唯一标识符(UUID)。...jest-office 安装及示例 yarn add --dev jest 测试sum函数,这个函数的功能是两数相加。

    3K30

    让我告诉你一些强无敌的 NPM 软件包

    实用工具 Lodash lodash是一套现代 JavaScript 实用程序库,提供模块化、性能与多种附加功能。可提供关于 JavaScript 数组对象及其他数据结构的多种实用功能。...我常用的一些方法如下 // -----------------------------深度比较两个对象的值是否全相等 import { isEqual, cloneDeep, uniqBy, sortBy...{ 'user': 'fred', 'age': 40 }, { 'user': 'fred', 'age': 48 }, ]; */ 复制代码 qs qs 处理 URL 查询字符串,支持内嵌对象数组...---- ‍♂️ 数据生成器 Uuid uuid是一个便捷的微型软件包,能够快速生成更为复杂的通用唯一标识符(UUID)。...安装及示例 yarn add --dev jest 复制代码 测试sum函数,这个函数的功能是两数相加。

    1.9K20

    踩坑ThinkPHP5之模型对象返回数据集如何转为数组

    防雷——tp5模型操作数据库 各位小伙伴们大家好,冷月今天在做项目的过程中呢,遇到了一个坑就是用tp5的模型操作数据库时,返回的是数据集而不是直接的数组。于是冷月就想办法如何将数据集转为数组。...然后,返回的是数据集而不是可以直接操作的数组: ?...然后我试着利用toArray()这个方法看看能不能转为数组: ?...再查阅资料和看tp5使用手册后,冷月发现将数据库配置database.php文件里的resultset_type改为collection后,就可以解决这个问题。 ?...然后,同样的代码成功返回想要的数组: ? 最后的啰嗦: 只要思想不滑坡,办法总比问题多 快去学习去~ 勤加练习,早日收获自己的offer!

    1.6K20

    javascript数组常用函数与实战总结

    前言 在node.js后端开发过程中,数组这种数据类型(Object类型)再常见不过,本文主要介绍数组的一些常见函数,以及在实战开发过程中能更好的操作数组lodash包。...result.includes(i)) { result.push(i) } } ES6 新增了Set这一数据结构 类似数组 但是Set成员具有唯一性,基于唯一性适合做数组去重...(_.uniq(array)); 数组求和 lodash中的函数 _sum 代码: let sorce=_.sum([32,45,86,43]); 获取数组中指定键值对的值组成数组 lodash中的函数..._map 说明:例如这样一个包含对象数组[{id:1,name:'koala'},{id:2,name:'koala1'}],想拿到数组对象中id的数据组成一个数组。...中的函数**_.findIndex** 说明:对于一个数组,里面每个值是对象的时候,这个函数,可以不完全判断对象一定是相同的。

    1.1K20

    TC39提案(stage123)?这还是我熟悉的js吗?

    前言 最近看到了一些很有趣的 ES 提案,如 Record 与 Tuple 数据类型,思路来自 RxJS 的 Observable,借鉴自函数式编程的 throw Expressions,带来更好错误处理的...Record & Tuple(stage2) proposal-record-tuple[10] 这一提案为 JavaScript 新增了两种数据结构:Record(类似于对象) 和 Tuple(类似于数组...这主要是因为 JavaScript 中[]可以对所有对象使用,所以arr[-1]返回的是 key 为-1的属性值,而非索引为-1(从后往前排序)的数组成员。...,我们以往使用的[...new Set(array)] 无法很好的处理非原始类型的值,这一提案引入了Array.prototype.uniqueBy()方法来进行数组的去重,类似于Lodash.uniqBy...,类似于[Lodash.uniqBy: https://www.lodashjs.com/docs/lodash.uniqBy The End

    63030

    一觉醒来,竟发现自己看不懂 JS 了?

    前言 最近看到了一些很有趣的 ES 提案,如 Record 与 Tuple 数据类型,思路来自 RxJS 的 Observable,借鉴自函数式编程的 throw Expressions,带来更好错误处理的...Record & Tuple(stage2) proposal-record-tuple[10] 这一提案为 JavaScript 新增了两种数据结构:Record(类似于对象) 和 Tuple(类似于数组...这主要是因为 JavaScript 中[]可以对所有对象使用,所以arr[-1]返回的是 key 为-1的属性值,而非索引为-1(从后往前排序)的数组成员。...,我们以往使用的[...new Set(array)] 无法很好的处理非原始类型的值,这一提案引入了Array.prototype.uniqueBy()方法来进行数组的去重,类似于Lodash.uniqBy...,类似于[Lodash.uniqBy: https://www.lodashjs.com/docs/lodash.uniqBy

    68220

    JavaScript 现代 Web 开发框架教程(九)

    Underscore 的实用函数主要作用于集合(数组和类似数组对象,如参数)、对象文字和函数。Underscore 最常用于过滤和转换数据。...因为这非常有用,所以 Underscore 内置了对函数链的支持,函数链可以创建简洁的管道,一次对数据应用多种转换。 聚合和索引 集合中的数据片段通常共享相似的模式,但具有使每个模式都唯一的标识属性。...给定一个元素数组和一个函数,filter()将函数应用于每个元素,并返回一个只包含通过标准测试的元素的数组。在清单 16-7 中,一组扑克牌被过滤,因此只返回黑桃。 Listing 16-7....如果没有对象通过标准测试,则每个对象返回一个空集。开发人员可以使用这些函数在集合中查找单个对象(例如,通过某个唯一标识符),但随后必须使用索引零从结果数组中找出该对象。...对象也是数据的集合,由字符串键而不是有序数字索引;和数组一样,过滤单个对象中的数据也非常有用。

    7410

    【译】如何在JavaScript中复制Object

    复值对象的值和复制对象的引用的区别在与通过复制值可以得到两个有着相同值或数据,但是毫不相干的对象,复制引用意味着得到的两个对象在内存中指向相同的数据块。...这两个函数都接受一个叫做customizer的定制函数,用来复制值。 如果你希望加入一些自定义的复制逻辑你可以传递一个函数Lodash。...this', created_at: 1545372000000, updated_at: 1546322400000, deleted_at: 1551333600000 } 正如你所见,唯一发生变化的数据是...因为我不相信自己正确实现了一个完整的复制方法(读者将我的代码复制到他们的生产环境时存在风险的),我从这个gist中复制了一个函数,该函数以递归方式复制对象并且覆盖了很多在JavaScript运行中遇到的数据类型...__proto__.constructor(thing); } } 这个函数先处理特定数据类型(如数组,正则表达式,函数等),然后再处理其他数据类型(如数字,字符串,布尔值等),它通过thing

    2.1K20

    Array对象---返回传入一个测试条件(函数)符合条件的数组第一个元素位置。->findIndex()

    定义: 返回传入一个测试条件(函数)符合条件的数组第一个元素位置。...为数组中的每个元素都调用一次函数执行: 当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。...如果没有符合条件的元素返回 -1 对于空数组函数是不会执行的 没有改变数组的原始值 array.findIndex(function(currentValue, index, arr), thisValue...当前元素所属的数组对象 示例: var ages = [4, 12, 16, 20]; function checkAge(age) { return age ==12; } ages.findIndex...(checkAge); 输出值为1,操作为返回数值为12的索引,即索引1 与indexOf()不同,indexOf()为返回数组中某个指定的元素位置 , findIndex()的查询条件则是一个函数

    1.3K30

    前端MVC Vue2学习总结(六)——axios与跨域HTTP请求、Lodash工具库

    它内部封装了诸多对字符串、数组对象等常见数据类型的处理函数,其中部分是目前 ECMAScript 尚未制定的规范,但同时被业界所认可的辅助函数。...提供的辅助函数主要分为以下几类,函数列表和用法实例请查看 Lodash 的官方文档: Array,适用于数组类型,比如填充数据、查找元素、数组分片等操作 Collection,适用于数组对象类型,部分适用于字符串...在上面的代码中,开发者可以使用数组、字符串以及函数的方式筛选对象的属性,并且最终会返回一个新的对象,中间执行筛选时不会对旧对象产生影响。...参数1): 需要查询的数组.  参数2): 迭代器,可以是函数对象或者字符串.  参数3): 对应 predicate 属性的值.  返回值(Array): 截取元素后的数组.  ...对象以开启内置的方法链.方法链对返回数组、集合或函数的方法产生作用,并且方法可以被链式调用.

    5.9K100
    领券