如何使用Lodash为对象数组匹配添加对应部门属性
使用Lodash实现对象属性映射
嘿,刚接触Lodash的话,用它来处理这种对象属性映射真的比手动循环清爽太多啦!针对你的需求,咱们可以用Lodash的工具函数轻松搞定,下面给你两种简单靠谱的写法:
方法一:结合_.map和_.get(推荐,容错性强)
这种方式能安全处理username在obj2中不存在的情况,还可以给缺失的部门设置默认值:
const obj_one = [ { "username": "bob", "adminType": "facebook" }, { "username": "tom", "adminType": "twitter" }, { "username": "bob", "adminType": "twitter" } ]; const obj2 = { "bob": { "full_name": "Bob Something", "department": "Social Site" }, "tom": { "full_name": "Tom Something", "department": "Networking Site" }, "harry": { "full_name": "Harry something", "department": "Principal Engineering" } }; const obj_result = _.map(obj_one, item => { // 用_.get安全获取department,不存在时返回默认值'Unknown' const department = _.get(obj2, `${item.username}.department`, 'Unknown'); // 合并原对象属性和新的department return { ...item, department }; });
方法二:直接解构+属性访问(简洁版)
如果能确定obj_one里的所有username都在obj2中有对应数据,也可以用更简洁的写法:
const obj_result = _.map(obj_one, item => ({ ...item, department: obj2[item.username].department }));
代码逻辑说明
_.map:遍历obj_one数组,对每个元素执行回调函数,最终返回全新的结果数组,完美匹配咱们生成新数组的需求。- 对象扩展运算符
...item:快速保留原对象的所有原有属性(username和adminType),不用手动逐个复制。 _.get:专门用来安全访问嵌套属性,就算某个username在obj2里找不到,也不会抛出报错,还能指定默认值,容错性拉满。
运行上面的代码后,就能得到你想要的obj_result啦!
内容的提问来源于stack exchange,提问作者kaounKaoun
相关产品推荐
相关产品推荐

