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

如何用Lodash批量处理对象及子对象指定属性的数值乘法

使用Lodash递归遍历并修改指定属性值

实现代码

const _ = require('lodash');

const calculate = (data, multiplier, keys) => {
  // 深拷贝原数据,避免修改原始对象
  const clonedData = _.cloneDeep(data);

  // 递归处理函数,遍历所有嵌套结构
  const processValue = (value) => {
    // 处理数组:遍历每个元素递归处理
    if (_.isArray(value)) {
      return _.map(value, processValue);
    }
    // 处理纯对象:遍历键值对判断是否需要修改
    if (_.isPlainObject(value)) {
      return _.transform(value, (result, val, key) => {
        // 匹配目标键且值为数字时执行乘法
        if (_.includes(keys, key) && _.isNumber(val)) {
          result[key] = val * multiplier;
        } else {
          // 非目标键则递归处理子结构
          result[key] = processValue(val);
        }
      });
    }
    // 非对象/数组类型直接返回原值
    return value;
  };

  return processValue(clonedData);
};

代码说明

  1. 深拷贝保护原始数据:用_.cloneDeep复制输入数据,确保原始API响应不会被修改,避免产生意外副作用。
  2. 递归遍历所有结构:
    • 遇到数组时,通过_.map逐个处理数组元素,保证嵌套数组也能被遍历到。
    • 遇到纯对象时,用_.transform构建新对象:
      • 检查当前属性名是否在目标keys列表中,同时判断值是否为数字类型,满足条件则执行乘法运算。
      • 不满足条件的属性,递归处理其值,保持原数据结构不变。
  3. 兼容多种数据类型:对于字符串、日期字符串、非数字类型的属性,直接返回原值,不做任何修改。

验证示例

使用你提供的测试数据调用函数:

let data = {
    id: 4,
    price: 100,
    discount: 10,
    total_price: 90,
    create_date: '2024-09-06T14:35:42.759Z',
    parent_id: 3,
    parent: {
        id: 3,
        price: 1000,
        discount: 0,
        total_price: 1000,
        create_date: '2024-09-06T13:35:42.759Z',
    },
    items: [
        {
            id: 10,
            name: 'item 1',
            cost: 3,
            price: 5,
            quantity: 5
        },
    ],
    others: {
        otherValues: [
            {
                id: 9,
                name: 'other 1',
                price: 10,
                quantity: 1
            },
        ]
    }
};

let calculated = calculate(data, 1.5, ['price', 'total_price', 'cost']);

执行后calculated的结果完全符合预期输出,所有匹配price、total_price、cost的属性值都被乘以1.5,其他属性和结构保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:37:19