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

使用Lodash _.omit结合_.map转换对象数组失败问题求助

问题分析与解决方案

我来帮你看看问题出在哪~你的函数没生效主要有两个核心原因:

  • _.map 的回调函数里没有返回处理后的对象,而且你最后直接返回了原数组,完全没用到 _.map 生成的结果
  • _.omit 是纯函数,它不会修改原对象,而是返回一个移除了指定属性的新对象

修正后的代码

const _ = require('lodash');

var array = [{ id: 1, name: 'Peter', age: 29, city: 'New York' }, { id: 2, name: 'Peter2', age: 19, city: 'LA' }, { id: 3, name: 'Peter3', age: 89, city: 'Rio' }];

function mapArray(array) {
  // 1. 用_.map遍历数组,回调返回_.omit处理后的新对象
  // 2. 返回_.map生成的新数组,而非原数组
  return _.map(array, object => _.omit(object, ['id', 'name']));
}

console.log(mapArray(array));

原代码失效的细节说明

  • 你在_.map的回调里只执行了_.omit(object, ['id', 'name']),但没有把这个结果return出去,导致_.map最终生成的是一个全是undefined的数组,而你根本没用到这个数组,直接返回了原array
  • _.omit不会改变原对象,所以原数组里的每个对象还是保持初始结构,这是Lodash纯函数的设计特点,避免产生意外的副作用

更直观的等价写法

如果你觉得箭头函数省略return有点绕,也可以写成显式返回的形式:

function mapArray(array) {
  return _.map(array, function(object) {
    // 显式返回处理后的新对象
    return _.omit(object, ['id', 'name']);
  });
}

运行修正后的代码,就能得到你期望的结果:

[{ age: 29, city: 'New York' }, { age: 19, city: 'LA' }, { age: 89, city: 'Rio' }];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:14:14