如何获取要在 lodash 映射函数中用作变量的键
How to get a key to be used as a variable in a lodash map function?
我正在尝试重组一个对象以方便。
这是一般结构:
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 几乎可以互换处理数组和对象,我认为非数组版本会更方便。
相关文章:
- 访问嵌套函数结构中的JavaScript父函数变量
- 如何运行对象映射函数
- Javascript函数变量传递语法问题
- JavaScript 函数变量范围问题
- 在 promise 中获取构造函数变量
- 角度和内置的javascript映射函数
- 将函数结果传递给Javascript中的另一个函数变量
- 用对象设置函数变量's值
- 将值传递给映射函数-CouchDB
- Javascript函数变量应生成错误,而不是未定义的错误
- 接受多个数组作为参数的javascript映射函数
- CouchDB-映射函数中的变量
- 我可以访问用户脚本中的匿名函数变量吗?
- 在实例化期间使用构造函数变量
- 如何使用数组和映射函数构建 JavaScript 对象
- 任何转换对象*值*的Javascript或Coffeescript“映射”函数
- 映射函数反应中的错误
- 为什么在 JavaScript 中不能用函数变量覆盖字符串变量
- 如何获取要在 lodash 映射函数中用作变量的键
- 映射函数而不是填充变量