Javascript 如何在lodash映射函数中获取用作变量的键?

Javascript 如何在lodash映射函数中获取用作变量的键?,javascript,lodash,Javascript,Lodash,为了方便起见,我正试图重组一个对象 这是总体结构: var dictionary = { "word": {"content": "wordy"}, "palabra": {"content":"palabrota" }}; 我希望它看起来像这样: [{"wordy":"word"},{"palabrota":"palabra"}] 我正在尝试以下代码: _.map(dictionary, function(v,k){ var new_key = v.content;return { n

为了方便起见,我正试图重组一个对象

这是总体结构:

 var dictionary = { "word": {"content": "wordy"}, "palabra": {"content":"palabrota" }};
我希望它看起来像这样:

 [{"wordy":"word"},{"palabrota":"palabra"}]
我正在尝试以下代码:

_.map(dictionary, function(v,k){ var new_key = v.content;return { new_key: k };} );
但结果并非我所期望的那样:

[ { new_key: 'word' }, { new_key: 'palabra' } ]
如何获取在该函数中用作变量的键?

您可以使用(从LoDash v4.1.0开始),这将为您提供键和值数组,从而确保值不会被覆盖

var dictionary = {
  "word": {"content": "wordy"},
  "anotherWord": {"content": "wordy"},
  "palabra": {"content":"palabrota" }
};

var result = _.invertBy(dictionary, function(item) {
  return item.content;
});

// "{"wordy":["word","anotherWord"],"palabrota":["palabra"]}"

编辑:前面的回复如下。这是可行的,但是限制是重复的内容值会覆盖密钥。下面的
.transform
文档展示了如何生成一个数组来处理重复项,类似的设置可以用于常规的JS方法

您可以使用:

或者完全不使用LoDash,您可以按预期构造对象

var result = {};
Object.keys(dictionary).forEach(function(key) {
    var value = dictionary[key].content;
    result[value] = key;
});

为了简单起见,我可能会推荐
.mapValues(字典,“内容”)


但是,您将得到
{word:“word”:“palabrota:“palabra”}
,而不是
{word:“word”,“palabrota:“palabra”}
作为
..mapValues
的结果。但是考虑到您使用的是lodash,并且lodash对数组和对象的处理非常互换,我认为非数组版本会更方便

为什么不只是,
var rtn={};rtn[v.content]=k;返回rtn?:)。真管用!解释起来有点混乱,因为我没有看到你的函数,但它是有效的!从技术上讲,这不是我要求的,但这是我想要的。变换是一种美丽的方法!考虑一种获得我想要的东西的方法,假设我有两个相等的“v.content”。@ovatsug25你在问题中没有提到以这种方式分组,从技术上来说:)那么如果你有多个相同值的
v.content
,你想要什么结果?一个数组,比如
{wordy:['word1','word2']}
?如果是这种情况,那么上面文档中指向
\uu.transform
的链接与您的请求完全匹配。它使用该值生成一个数组并按下键。@ovatsug25我已更新了我的响应,显示了如何使用
\uuu1.invertBy
var result = {};
Object.keys(dictionary).forEach(function(key) {
    var value = dictionary[key].content;
    result[value] = key;
});