相关文章推荐
打篮球的长颈鹿  ·  webpack打包js为npm包或者sdk支 ...·  1 月前    · 
一直单身的烈酒  ·  探索与实践:强大的Futil-js工具库·  1 月前    · 
低调的饭盒  ·  HTTP协议&实现一个最简单的HTTP服务器 ...·  6 月前    · 
腼腆的蛋挞  ·  很棒的WPF开源控件库Newbeecoder ...·  10 月前    · 
爱喝酒的圣诞树  ·  vba通配符模糊查找Word-掘金·  1 年前    · 
讲道义的黄瓜  ·  使用SQLServer的CDC功能实现数据变 ...·  1 年前    · 
腹黑的番茄  ·  【AIGC】BaiChuan7B开源大模型介 ...·  1 年前    · 
Code  ›  lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的开发者社区
js js代码 对象数组 lodash
https://cloud.tencent.com/developer/article/2132631
胡子拉碴的葫芦
8 月前
全栈程序员站长

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

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
全栈程序员站长
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的

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

作者头像
全栈程序员站长
发布 于 2022-10-03 12:48:34
4.9K 0
发布 于 2022-10-03 12:48:34
举报
文章被收录于专栏: 全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

先来看【原始数组】和【最终数组】对比:

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

标题有点绕,总的来说,是一个数组,根据以下步骤拆解:

  • ① 根据两个不同字段 “label” 、”type” 分别做筛选,-> 生成两个 对象 obj_label 和 obj_type
  • ② 将 obj_label 和 obj_type 转为 数组,分别是 arr_label 和 arr_type
  • ③ 合并 arr_label 和 arr_type 为 modu_data
  • ④ 去重 modu_data
  • ⑤ 过滤 modu_data 中为空的键值

前置了解:

lodash.js

https://www.lodashjs.com/

Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。 Lodash 的模块化方法 非常适用于:

  • 遍历 array、object 和 string
  • 对值进行操作和检测
  • 创建符合功能的函数

本篇文章中,主要用到了以下几个:

_.groupBy(collection, [iteratee=_.identity])

https://www.lodashjs.com/docs/lodash.groupBy#_groupbycollection-iteratee_identity

_.toPairsIn(object)

https://www.lodashjs.com/docs/lodash.toPairsIn#_topairsinobject

_.map(collection, [iteratee=_.identity])

https://www.lodashjs.com/docs/lodash.map#_mapcollection-iteratee_identity

_.concat(array, [values])

https://www.lodashjs.com/docs/lodash.concat#_concatarray-values

_.uniqBy(array, [iteratee=_.identity])

https://www.lodashjs.com/docs/lodash.uniqBy#_uniqbyarray-iteratee_identity

_.filter(collection, [predicate=_.identity])

https://www.lodashjs.com/docs/lodash.filter#_filtercollection-predicate_identity

这两个值分别做筛,方法看起来是有点多,但根据前面拆解的步骤点,你会发现每一个都用得到,也可以尝试不借助 lodash 工具来实现,emmmm……我试了下,代码太长了,就放弃了,感兴趣的话,你也可以试试。


原始数组:

代码语言: javascript
复制
[
        "id": "1",
        "title": "事件_1",
        "label": "金融",
        "type": "企业",
        "id": "2",
        "title": "事件_2",
        "label": "娱乐",
        "type": "",
        "id": "3",
        "title": "事件_3",
        "label": "娱乐",
        "type": "娱乐",
        "id": "4",
        "title": "事件_4",
        "label": "社会",
        "type": null,
        "id": "5",
        "title": "事件_5",
        "label": "",
        "type": "社会",
] 

原始数组中,label 和 type 都有 “” 或者 null 的状态,先不要在意这个,我们到最后才会处理异常状态。

① 使用 groupBy(),第一个参数是原始数组,第二个值是根据“关键词”做筛选,在这里需要根据 label 和 type 这两个值分别做筛选,生成两个键值对象

代码语言: javascript
复制
lodash.groupBy(res_data, "label")
lodash.groupBy(res_data, "type")
lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的
lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的

② 使用 toPairsIn() 将对象转为数组,参数是 Object 对象

代码语言: javascript
复制
lodash.toPairsIn(  lodash.groupBy(res_data, "label")  )
lodash.toPairsIn(  lodash.groupBy(res_data, "type")  )
lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的
lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的

③ 使用 map() 将数组转为 Object 键值对 对象

代码语言: javascript
复制
lodash.toPairsIn(
        lodash.groupBy(res.data.result, "label")
      .map(([prop, value]) => ({ prop, value }))
lodash.toPairsIn(
        lodash.groupBy(res.data.result, "type")
      .map(([prop, value]) => ({ prop, value }))
lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的
lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的

④ 使用 concat() 将两个数组 组合起来,有重复的暂时不做处理

代码语言: javascript
复制
lodash.concat(  
    lodash.toPairsIn(
        lodash.groupBy(res.data.result, "label")
      .map(([prop, value]) => ({ prop, value })) ,
    lodash.toPairsIn(
        lodash.groupBy(res.data.result, "type")
      .map(([prop, value]) => ({ prop, value }))
)
lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的
lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的

⑤ 使用 uniqBy() 针对 “prop” 字段去重

代码语言: javascript
复制
lodash.uniqBy(
    lodash.concat(  
        lodash.toPairsIn(
            lodash.groupBy(res.data.result, "label")
          .map(([prop, value]) => ({ prop, value })) ,
        lodash.toPairsIn(
            lodash.groupBy(res.data.result, "type")
          .map(([prop, value]) => ({ prop, value }))
    "prop"
)
lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的
lodash判断对象数组是否相等_js删除数组中指定元素并返回剩下的

⑥ 使用 filter() 过滤掉 !!props 的对象

代码语言: javascript
复制
lodash.uniqBy(
    lodash.concat(  
        lodash.toPairsIn(
            lodash.groupBy(res.data.result, "label")
          .map(([prop, value]) => ({ prop, value })) ,
        lodash.toPairsIn(
            lodash.groupBy(res.data.result, "type")
          .map(([prop, value]) => ({ prop, value }))
    "prop"
 
推荐文章
打篮球的长颈鹿  ·  webpack打包js为npm包或者sdk支持cmmonjs引入和浏览器引入中export default问题_js打包sdk
1 月前
一直单身的烈酒  ·  探索与实践:强大的Futil-js工具库
1 月前
低调的饭盒  ·  HTTP协议&实现一个最简单的HTTP服务器-CSDN博客
6 月前
腼腆的蛋挞  ·  很棒的WPF开源控件库Newbeecoder.UI-腾讯云开发者社区-腾讯云
10 月前
爱喝酒的圣诞树  ·  vba通配符模糊查找Word-掘金
1 年前
讲道义的黄瓜  ·  使用SQLServer的CDC功能实现数据变更捕获-CSDN博客
1 年前
腹黑的番茄  ·  【AIGC】BaiChuan7B开源大模型介绍、部署以及创建接口服务_feifeiyechuan的博客-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号