我有一个这样的对象:var o = { foo:"foo", bar:"bar" }
我想要一个像这样的输出:[ { foo:"foo" }, { bar:"bar" } ]
我希望代码简洁,通常下划线提供了这一点。我已经走到了这一步......
_.map(_.pairs(o), function(pair) { return { pair[0] : pair[1] }; });
但当然我不能将评估表达式用作该代码中的键。我想我能做到这一点......
_.map(_.pairs(o), function(pair) {
var kv = {};
kv[pair[0]] = pair[1];
return kv;
});
但我希望简明扼要。事实并非如此。好像那里有一个简单的单行,我太傻了。有吗?
PS - 我想要这个,因为我想将对象转换为mongo查询析取,如下所示:
{ $or: [ { foo:"foo" }, { bar:"bar" } ] }
答案 0 :(得分:2)
如果您将pair[0]
更改为[pair[0]]
,您的oneliner将在ES6中运行:
_.map( _.pairs( o ), pair => ( { [pair[0]] : pair[1] } ) );
您也可以在ES6中执行此操作而不使用下划线:
Object.keys( o ).map( key => ( { [key]: o[key] } ) );
或略短于下划线:
_.keys( o ).map( key => ( { [key]: o[key] } ) );
或:
_.map( o, (value, key) => ( { [key]: value } ) ) );
答案 1 :(得分:1)
Working example
您可能应该使用 $rootScope.listCounter = $firebaseArray(allLists);
:
_.mapObject
然后你可以把它包装在一个数组中:
var a = _.mapObject(o, function(val, key) {
return {val: key};
});