lodash的_.invertBy方法对应逆函数是什么?如何实现双向转换?
解决lodash
_.invertBy() 双向往返还原失效问题 失效原因
_.invertBy() 的默认逻辑是将对象的值直接序列化为字符串作为反转后的键。你第一次调用得到值为数组的分组对象后,第二次调用_.invertBy()时,会把数组值比如['apple', 'pear']直接转为字符串apple,pear作为新键,自然无法匹配原始对象的结构。
解决方案
不要直接对第一次反转的结果二次调用_.invertBy(),改用自定义还原逻辑即可:
// 原始对象 const original = {apple: 'fruit', pear: 'fruit'}; // 第一次调用得到分组反转结果 const inverted = _.invertBy(original); // 自定义还原逻辑 const restored = {}; _.forEach(inverted, (originalKeys, groupValue) => { originalKeys.forEach(key => { restored[key] = groupValue; }); }); // 验证:restored 和 original 结构完全一致 console.log(restored); // {apple: 'fruit', pear: 'fruit'}
如果需要频繁做这类双向往返操作,可以封装成专用工具函数:
// 正向:普通对象转分组反转对象 const groupByValue = (obj) => _.invertBy(obj); // 反向:分组反转对象还原为普通对象 const restoreFromGroup = (groupedObj) => { return _.transform(groupedObj, (result, keys, value) => { keys.forEach(k => result[k] = value); }, {}); }; // 双向测试 const origin = { apple: 'fruit', pear: 'fruit', carrot: 'vegetable', tomato: 'vegetable' }; const grouped = groupByValue(origin); const restored = restoreFromGroup(grouped); // restored 与 origin 结构、内容完全相等
内容的提问来源于stack exchange,提问作者white_gecko
相关产品推荐
相关产品推荐

