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

如何使用Lodash提取嵌套JSON对象中最内层的amount键对应数值

使用Lodash提取JSON对象中最内层的amount数值

嘿,我明白你为啥用findKey和pick没搞定了——这些方法在处理嵌套层级深、结构还不一样的JSON对象时确实不太顺手。别担心,用Lodash的话有几个靠谱的办法能轻松提取到每个对象里最内层的amount数值,咱们一步步来:

方案一:针对每个对象的结构直接用_.get()

_.get()是Lodash里处理嵌套路径的神器,它能直接指定要提取的属性路径,还能处理数组索引,甚至找不到时可以返回默认值。针对你给出的三个对象,具体用法如下:

首先假设你已经导入了Lodash:

const _ = require('lodash');

然后逐个提取:

// 第一个对象
const obj1 = { "coins": [], "contract": "terra1u0t35drzyy0mujj8rkdyzhe264uls4ug3wdp3x", "execute_msg": { "send": { "amount": "1000000", "contract": "terra1ltnkx0mv7lf2rca9f8w740ashu93ujughy4s7p", "msg": "eyJkZXBvc2l0X2NvbGxhdGVyYWwiOnt9fQ==" } }, "sender": "terra194rswjxvv0a2fm3f8hr4e4f3443dl3s7frsyhp" };
const amount1 = Number(_.get(obj1, 'execute_msg.send.amount')); // 输出:1000000

// 第二个对象
const obj2 = { "amount": [ { "amount": "1000000", "denom": "uusd" } ], "from_address": "terra194rswjxvv0a2fm3f8hr4e4f3443dl3s7frsyhp", "to_address": "terra1ux73wdfgmu7r5us2sf0u9vdmrfxuhdk8760zzj" };
const amount2 = Number(_.get(obj2, 'amount[0].amount')); // 输出:1000000

// 第三个对象
const obj3 = { "coins": [ { "amount": "2000000", "denom": "uusd" } ], "contract": "terra15dwd5mj8v59wpj0wvt233mf5efdff808c5tkal", "execute_msg": { "deposit_stable": {} }, "sender": "terra194rswjxvv0a2fm3f8hr4e4f3443dl3s7frsyhp" };
const amount3 = Number(_.get(obj3, 'coins[0].amount')); // 输出:2000000

方案二:写一个通用函数自动提取(适配更多类似结构)

如果以后还有结构不同但都包含最内层amount的对象,你可以写一个递归遍历的通用函数,自动找到所有最内层的amount值:

function extractInnerAmount(obj) {
  let targetAmount;
  // 递归遍历对象的每个属性
  _.forEach(obj, (value, key) => {
    // 找到键名为amount且值是字符串的(也就是最内层的amount)
    if (key === 'amount' && typeof value === 'string') {
      targetAmount = Number(value);
    }
    // 如果当前值是对象/数组,继续递归查找
    else if (_.isObject(value)) {
      const innerResult = extractInnerAmount(value);
      if (innerResult !== undefined) {
        targetAmount = innerResult;
      }
    }
  });
  return targetAmount;
}

// 测试三个对象
console.log(extractInnerAmount(obj1)); // 1000000
console.log(extractInnerAmount(obj2)); // 1000000
console.log(extractInnerAmount(obj3)); // 2000000

为啥之前的方法没生效?

findKey只能找到当前层级的键名,没法深入嵌套结构;pick也是提取指定层级的属性,遇到数组或者多层嵌套的对象就无能为力了。而_.get()直接支持路径表达式,递归方法则能自动遍历所有层级,完美适配你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:12:32