如何在 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
method(从 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
method:
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")
。
但是,_.mapValues
的结果不是 [{"wordy":"word"},{"palabrota":"palabra"}]
,而是 {"wordy": "word", "palabrota": "palabra"}
。但鉴于您使用的是 lodash,并且 lodash 几乎可以互换地处理数组和对象,我认为非数组版本会更方便。
为了方便起见,我正在尝试重组对象。
这是一般结构:
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
method(从 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
method:
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")
。
但是,_.mapValues
的结果不是 [{"wordy":"word"},{"palabrota":"palabra"}]
,而是 {"wordy": "word", "palabrota": "palabra"}
。但鉴于您使用的是 lodash,并且 lodash 几乎可以互换地处理数组和对象,我认为非数组版本会更方便。