当前位置: 首页 > web >正文

[面试] 手写题-对象数组根据某个字段进行分组

题目1

// 输入
let arr = [{name: '张三', age: 18},{name: '李四', age: 20},{name: '王五', age: 18},{name: '赵六', age: 20},{name: '孙七', age: 21},
];// 输出
{18: [{name: '张三', age: 18}, {name: '王五', age: 18}],20: [{name: '李四', age: 20}, {name: '赵六', age: 20}],21: [{name: '孙七', age: 21}],
}

代码

function groupBy(arr) {let obj = {};arr.forEach(item => {if (!obj[item.age]) {obj[item.age] = [];}obj[item.age].push(item);});return obj;
}

改成指定字段

function groupBy(arr,key) {let obj = {};arr.forEach(item => {if (!obj[item[key]]) {obj[item[key]] = [];}obj[item[key]].push(item);});return obj;
}groupBy(arr,'age')

题目2

// 输入
let arr = [{name: '张三', age: 18},{name: '李四', age: 20},{name: '王五', age: 18},{name: '赵六', age: 20},{name: '孙七', age: 21},
];// 输出
[{key: "18",data: [{name: '张三', age: 18}, {name: '王五', age: 18}]},{key: "20",data: [{name: '李四', age: 20}, {name: '赵六', age: 20}]},{key: "21",data: [{name: '孙七', age: 21}]}
]

代码

function groupBy(arr) {let obj = {};arr.forEach(item => {if (!obj[item.age]) {obj[item.age] = [];}obj[item.age].push(item);});let resArr = []Object.keys(obj).forEach(key=> {resArr.push({age: key,data: obj[key],})})return resArr
}

参考:

【JS】js数组分组,javascript实现数组的按属性分组

js数组操作——对象数组根据某个相同的字段分组

http://www.xdnf.cn/news/15589.html

相关文章:

  • 学习嵌入式的第二十八天-数据结构-(2025.7.15)进程和线程
  • P3842 [TJOI2007] 线段
  • Web攻防-PHP反序列化字符逃逸增多减少成员变量属性解析不敏感Wakeup绕过
  • 高等数学强化——导学
  • Android中Launcher简介
  • deepseekAI对接大模型的网页PHP源码带管理后台(可实现上传分析文件)
  • ASP .NET Core 8结合JWT轻松实现身份验证和授权
  • SpringBoot 实现 Redis读写分离
  • “C21988-谷物烘干机(2D+3D+说明书+运动仿真)8张cad+设计说明书
  • pytorch学习笔记(四)-- TorchVision 物体检测微调教程
  • 常用高频指令总结
  • iOS App 上架工具选型与跨平台开发 iOS 上架流程优化实录
  • 视频HDR技术全解析:从原理到应用的深度探索
  • 【时时三省】(C语言基础)通过指针引用多维数组
  • 视频编码中熵编码之基于上下文的变长编码(Huffman霍夫曼编码和指数哥伦布)
  • 网络编程-epoll模型/udp通信
  • css 边框颜色渐变
  • 【linux V0.11】init/main.c
  • JAVA青企码协会模式系统源码支持微信公众号+微信小程序+H5+APP
  • Spring MVC 执行流程详解:一次请求经历了什么?
  • 基于铸造机床的Canopen转Profinet协议转换网关应用研究
  • 涨停板池,跌停板池,炸板池,次新股池,强势股池数据接口
  • Python命令行计算2的22次方方法
  • 轻松管理多个Go版本:g工具安装与使用
  • keeplived双击热备配置
  • Spring Security 实践及源码学习
  • 如何轻松将音乐从安卓设备传输到安卓设备
  • 504网关超时可能是哪些原因导致?
  • 短剧小程序的「技术革命」:从「粗放生长」到「精准运营」
  • Docker镜像导入、导出操作指南