我有一个带键的对象
var obj = { a: { fruit: 'Apple' }, b: { fruit: 'Banana' } }
我想快速将密钥(a / b
)作为属性name
移动到值。我可以找出quicker way来做这件事。
_(obj).keys().each(function(key)
{
obj[key].name = key;
})
var results = _.values(obj);
这不仅仅是出于审美原因,我不能使用function关键字,因为它是一个角度表达式
答案 0 :(得分:2)
感兴趣的人,这就是我最终做到这一点的方式:
_.mixin({
toArrayFromObj: function (object, keyName)
{
return _(object).keys().map(function (item)
{
object[item][keyName] = item;
return object[item];
}).value();
}
});
我很乐意接受名称或实施建议。
答案 1 :(得分:2)
我提出了一个稍微不同的解决方案:
_.mixin({
disorder: function(collection, path) {
return _.transform(collection, function(result, item, key) {
if (path)
_.set(item, path, key);
result.push(item);
}, []);
}
});
由于使用了_.set
,密钥属性也可以转移到嵌套属性。
var indexedBooks = {
'a1': { title: 'foo' },
'a2': { title: 'bar' }
};
var books = _.disorder(indexedBooks, 'author._id');
// → [{ 'title': 'foo', 'author': { '_id': 'a1' }},
// { 'title': 'bar', 'author': { '_id': 'a2' }}]
答案 2 :(得分:0)
这是我在打字稿中反转lodash的keyBy
的版本。
import { List, Dictionary } from 'lodash';
function unkeyBy<T>(object: Dictionary<T>, key = 'id'): List<T> {
return Object.keys(object).map((item) => {
return { [key]: item, ...object[item] };
});
}