我试图重新构建一个对象以便于进行。
这是一般结构:
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' } ]
如何在此函数中获取用作变量的键?
答案 0 :(得分:2)
您可以使用_.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;
});
答案 1 :(得分:1)
为简单起见,我可能会推荐_.mapValues(dictionary, "content")
。
但是,[{"wordy":"word"},{"palabrota":"palabra"}]
取代{"wordy": "word", "palabrota": "palabra"}
而不是_.mapValues
,而不是start_time
。但鉴于你正在使用lodash,并且lodash几乎可以互换地处理数组和对象,我认为非数组版本会更方便。