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

Node.js中用Underscore查找嵌套对象中targetName=bob的环境名称

解决嵌套对象中查找targetName为bob的环境名称问题

嘿,我来帮你搞定这个嵌套对象查找的问题!首先得先明确下你的对象结构大概是啥样——我猜应该是类似这样的(如果不是的话,你可以调整下例子里的结构适配你的情况):

const environments = {
  dev: { targetName: 'alice' },
  prod: { targetName: 'bob' },
  test: { targetName: 'charlie' }
};

用Underscore的chain/where处理的正确姿势

你之前出现语法错误,大概率是因为直接对嵌套对象用where,但where是用来处理数组的,所以得先把对象转成符合要求的数组结构,再链式调用处理:

const _ = require('underscore');

const matchingEnv = _.chain(environments)
  // 第一步:把每个环境的键值对转成包含环境名和target信息的对象
  .mapObject((targetInfo, envName) => ({ envName, ...targetInfo }))
  // 第二步:把对象转成数组(因为where需要数组输入)
  .values()
  // 第三步:筛选出targetName等于'bob'的项
  .where({ targetName: 'bob' })
  // 第四步:提取环境名称
  .pluck('envName')
  // 第五步:获取最终结果(如果有多个匹配项,会返回数组)
  .value();

console.log(matchingEnv); // 输出: ['prod']

每一步的作用都标出来了,这样链式调用就不会有语法问题啦~如果只需要第一个匹配的环境名,可以在最后加个.first()再.value()。

不用Underscore的原生JS方案

其实原生JS也能轻松搞定,甚至更简洁,给你两种常用写法:

写法1:找第一个匹配的环境名

// 用Object.entries把对象转成键值对数组,再用find筛选
const [targetEnv] = Object.entries(environments).find(([key, info]) => info.targetName === 'bob') || [];

console.log(targetEnv); // 输出: 'prod'(没找到的话是undefined)

写法2:找所有匹配的环境名

// 用filter筛选所有符合条件的,再map提取环境名
const allMatchingEnvs = Object.entries(environments)
  .filter(([key, info]) => info.targetName === 'bob')
  .map(([key]) => key);

console.log(allMatchingEnvs); // 输出: ['prod']

这样不管用Underscore还是原生JS,都能正确处理嵌套对象的查找问题啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:14:50