使用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
相关产品推荐
相关产品推荐

