【发布时间】:2018-05-20 10:46:36
【问题描述】:
我有一个包含对象列表的数组。
var myArray = [
{Color:"red", Fruit:"apple", Country:"us", Value:1},
{Color:"red", Fruit:"cherry", Country:"us", Value:1},
{Color:"red", Fruit:"apple", Country:"italy", Value:1},
{Color:"red", Fruit:"apple", Country:"italy", Value:2},
{Color:"red", Fruit:"strawberry", Country:"italy", Value:2},
{Color:"red", Fruit:"cherry", Country:"italy", Value:1},
{Color:"yellow", Fruit:"banana", Country:"us", Value:1},
{Color:"yellow", Fruit:"banana", Country:"italy", Value:1},
{Color:"yellow", Fruit:"pineapple", Country:"italy", Value:5},
{Color:"yellow", Fruit:"mango", Country:"italy", Value:3},
];
此功能按颜色对所有水果进行分组。我想在我的数组 groupColor 的每个对象中添加一个顶级列表(Top2)。 “Top2”是价值最重要的 2 个水果(顺序也很重要)。
var groupColor = _(_.where(myArray, { Country: "italy", })).groupBy("Color");
var myNewArray=_(groupColor).map(function(g, key) {
return {
Color: key || 0,
Total: _(g).reduce(function(m, x) {
return m + x.Value;
}, 0),
};
});
我想要一个这样的数组
var myNewArray = [
{ Color: "red", Total: 6, top2:"apple, strawberry" },
{ Color: "yellow", Total: 9, top2:"pineapple,mango" },
];
我终于解决了这个问题
var ArraySelectCountry = _(_.where(myArray, {Country: "italy"}));
var ObjectsGrouped = _(ArraySelectCountry).chain()
.groupBy(function (itm) {
return itm.Color + itm.Fruit ;
}) // group by Metier & Genre
.map(function (itm, key) { // for every grouped item
// we sum up the values OnTime
var sum = _(itm).chain()
.pluck("Value")
.reduce(function (memo, value) {
return memo = memo + Number(value);
}, 0.0)
.value();
return _.object(["Color", "Fruit", "Value"], [itm[0].Color, itm[0].Fruit, sum])
})
.value();
var ObjectsGrouped= _.sortBy(ObjectsGrouped, function(o) { return o.Value; }).reverse();
var ObjectsGroupedByColor = _(ObjectsGrouped).groupBy('Color');
var myNewArray = _(ObjectsGroupedByColor).map(function(g, key) {
return {
Color: key,
Value: _(g).reduce(function(m,x) { return m + x.Value; }, 0) ,
Liste: _.uniq(_.pluck(_.where(ObjectsGrouped, {Color: key}),"Fruit"))
};
});
【问题讨论】:
-
StackOverflow 不是免费的编码服务。所以希望你try to solve your own problem first。请更新您的问题以在minimal reproducible example 中显示您已经尝试过的内容。如需更多信息,请参阅How to Ask,并拨打tour :)
标签: javascript arrays object underscore.js