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

如何使用Lodash在数组对象中查找并添加额外属性?

用Lodash实现数组对象的精准属性添加(无for循环/临时数据)

嘿,这问题我熟!不用for循环和临时数据处理,用Lodash的内置方法就能轻松搞定。下面给你两种简洁的实现方式:

方法一:精准定位+属性赋值

这种方式直接找到目标对象,然后添加属性,逻辑清晰明了:

const _ = require('lodash');

// 原始数据
const book = [
  {
    "name": "Hulk",
    "series": [
      { "name": "mike", "id": "100" },
      { "name": "steve", "id": "200" }
    ]
  }
];

// 深拷贝原数据(避免修改原始数据,可根据需求省略)
const updatedBook = _.cloneDeep(book);

// 找到符合条件的series对象
const targetItem = _.find(updatedBook[0].series, { name: 'mike', id: '100' });

// 如果找到目标,添加detail属性
if (targetItem) {
  _.assign(targetItem, { detail: { author: 'apple', year: 1956 } });
}

console.log(updatedBook);

方法二:链式函数式处理

如果更倾向于函数式风格,用_.update结合_.map来实现,全程无手动循环:

const _ = require('lodash');

const book = [
  {
    "name": "Hulk",
    "series": [
      { "name": "mike", "id": "100" },
      { "name": "steve", "id": "200" }
    ]
  }
];

const updatedBook = _.update(
  _.cloneDeep(book),
  '[0].series', // 指定要修改的路径
  (series) => _.map(series, (item) => {
    // 匹配条件则合并detail属性,否则返回原对象
    return _.isMatch(item, { name: 'mike', id: '100' }) 
      ? _.merge({}, item, { detail: { author: 'apple', year: 1956 } })
      : item;
  })
);

console.log(updatedBook);

关键说明:

  • _.cloneDeep:用来深拷贝原始数据,防止修改原数据影响其他逻辑,如果你允许直接修改原数据,可以去掉这一步。
  • _.find:通过匹配对象快速定位目标,比手动循环高效且简洁。
  • _.update+_.map:函数式的处理方式,通过路径定位到series数组,遍历并修改匹配项,全程无需手动写循环。

两种方法都能得到你期望的结果,返回完整的book数据,且目标series对象会新增detail属性。

内容的提问来源于stack exchange,提问作者Balasubramanian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:44:08