You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Lodash提取对象数组指定属性拼接为合并数组

问题解答

这个需求完全可以通过Lodash实现,你最初考虑的unionWith并不适配这个场景,最优实现方案如下:

  • 核心方法选_.flatMap:这个方法会遍历父数组的每个元素,提取你指定的course_data属性,自动将所有子数组按原有顺序拼接为一维数组,不需要额外处理,一行代码就能得到你要的结果。
// 直接得到目标格式的一维数组
const concatenated_array = _.flatMap(employees, 'course_data')

// 后续直接调用groupBy即可,比如按for字段分组示例
// const groupedResult = _.groupBy(concatenated_array, 'for')
  • 为什么不推荐_.unionWith:这个方法的设计目标是合并数组时按自定义规则去重,你的需求不需要做去重处理,用它不仅写法冗余,还会增加无意义的元素比较逻辑,性能更差。如果硬要用unionWith实现,需要强行让比较逻辑永远判定元素不重复,属于多余操作,示例写法如下(不推荐实际使用):
const courseDataList = _.map(employees, 'course_data')
const concatenated_array = _.unionWith(...courseDataList, () => false)

注意:你给出的原始employees数组存在语法问题:同一个对象内重复声明了emp_id和course_data属性,JS中同键名后写的值会覆盖前面的值,实际运行时第一个员工的数据会丢失。你需要把两个员工的信息拆成父数组下的两个独立对象,修正后的源结构参考:

let employees = 
[
    {
        emp_id: "1",
        course_data : [
            { info: "info", for: "emp_id_1" },
            { info: "more_info", for: "emp_id_1 " },
            { info: "even_more_info", for: "emp_id_1 " },
        ]
    },
    {
        emp_id: "2",
        course_data : [
            { info: "info", for: "emp_id_2" },
            { info: "more_info", for: "emp_id_2 " },
            { info: "even_more_info", for: "emp_id_2 " },
        ]
    }
];

内容的提问来源于stack exchange,提问作者J.spenc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:54:16