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

How to get a key to be used as a variable in a lodash map function?

本文关键字:映射函数 变量 lodash 何获取 获取      更新时间:2023-09-26

我正在尝试重组一个对象以方便。

这是一般结构:

 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' } ]

如何获取要在此函数中用作变量的键?

您可以使用

_.invertBy方法(从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 方法。

您可以使用_.transform方法:

var transformedResult = _.transform(dictionary, function(result, value, key) {
    return result[value.content] = key;
}); 

或者根本没有LoDash,您可以按预期构造对象。

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

为了简单起见,我可能会推荐_.mapValues(dictionary, "content")

但是,不是 [{"wordy":"word"},{"palabrota":"palabra"}] ,而是您将获得{"wordy": "word", "palabrota": "palabra"}作为 _.mapValues 的结果。 但是鉴于您使用的是 lodash,并且 lodash 几乎可以互换处理数组和对象,我认为非数组版本会更方便。