说我有一个类似下面的对象:
{
mainId: 1,
subArray1: [{count: 3, name: 'whatever'}, {count:5, name: 'something else'}],
subArray2: [{count: 6, name: 'more stuff'}, {count:7, name: 'who cares'}]
}
有什么方法可以使用underscore.js'pluck函数为父对象中的所有数组创建所有计数的数组?我试过了:
_.pluck(parentObject, 'count')
但这显然不起作用。到目前为止,我不得不为每个subArray单独调用:
_.pluck(parentObject.subArray1, 'count')
_.pluck(parentObject.subArray2, 'count')
然后连接数组。有没有办法在父对象上使用pluck并一举获取所有子数组的值?
答案 0 :(得分:1)
你必须循环你的原始对象,所以像这样的东西会起作用。 我认为没有办法避免以某种形式编写循环,即map或forEach。
var resultArr = [];
_.each(parentObject, function(elem, index){
resultArr = resultArr.concat(_.pluck(elem, 'count'););
});
答案 1 :(得分:1)
我认为你不能只用pluck
来做你想做的事情,但是map
和pluck
的组合可以让你到达那里:
_.map(parentObject, function(item) { return _.pluck(item, 'count'); }));
这会给你:
[[],[3,5],[6,7]]
如果你想丢弃非数组的计数,你也可以这样做:
_.compact(_.map(parentObject, function(item) {
if (_.isArray(item)) { return _.pluck(item, 'count'); }
}));
这将为非数组返回null
,然后compact
将删除空值,为您提供:
[[3,5],[6,7]]
要变平,只需:
_.flatten(_.compact(_.map(parentObject, function(item) {
if (_.isArray(item)) { return _.pluck(item, 'count'); }
})));
给你:
[3, 5, 6, 7]
答案 2 :(得分:0)
我会这样做:
var i = 0, subArray, counts = [];
while (subArray = ct['subArray' + (++i)]) {
counts = counts.concat(subArray);
}
counts = _.pluck(counts, 'count');