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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:15:01