如何用Lodash从含对象数组的对象中提取指定键?
解决方案:提取嵌套数组中的指定属性
_.pick无法生效的原因是它仅支持提取顶层属性或单个嵌套对象的属性路径(如obj.a.b),但无法自动遍历数组并提取数组内每个对象的属性。针对你的需求,以下是几种可行的实现方式:
方法一:Lodash 结合 map 手动构造结果
适合结构明确的场景,直接提取目标属性并处理数组:
const _ = require('lodash'); // 示例输入数据 const object1 = { publicId: 'abc-123', arrayOfObject2: [ { username: 'alice', age: 28 }, { username: 'bob', age: 32 } ], extraProp: '无需保留' }; // 提取publicId,同时提取arrayOfObject2中每个对象的username(保留对象结构) const result = { publicId: object1.publicId, arrayOfObject2: _.map(object1.arrayOfObject2, item => _.pick(item, 'username')) }; // 如果只需要username的数组(而非对象数组),可以简化为: // arrayOfObject2: _.map(object1.arrayOfObject2, 'username')
方法二:Lodash transform 处理复杂结构
如果需要处理更多嵌套或动态属性,_.transform更灵活:
const result = _.transform(object1, (acc, value, key) => { switch(key) { case 'publicId': acc[key] = value; break; case 'arrayOfObject2': acc[key] = _.map(value, item => _.pick(item, 'username')); break; // 可添加其他需要保留的属性逻辑 } }, {});
方法三:原生 JavaScript 实现
无需依赖Lodash时,原生map也能轻松实现:
// 保留对象结构的结果 const result = { publicId: object1.publicId, arrayOfObject2: object1.arrayOfObject2.map(item => ({ username: item.username })) }; // 仅提取username数组 // arrayOfObject2: object1.arrayOfObject2.map(item => item.username)
内容的提问来源于stack exchange,提问作者Ali Heydari
相关产品推荐
相关产品推荐

