我有一个车辆阵列,需要分组按制造和模型,只有当‘选定’属性是真实的。生成的对象应该包含make模型和count的属性。如何使用lodash将车辆对象组织成所需的结果对象。我能够获得按makeCode分组的vehicle对象,但我不知道如何按多个属性进行分组。
组由make code works组成
var vehicles = _.groupBy(response.vehicleTypes, function(item)
{
return item.makeCode; // how to group by model code as well
});初始车辆
{
id: 1,
selected: true,
makeCode: "Make-A",
modelCode: "Model-a",
trimCode: "trim-a",
yearCode: "2012"
},
{
id: 2,
selected: false,
makeCode: "Make-A",
modelCode: "Model-a",
trimCode: "trim-a",
yearCode: "2013"
},
{
id: 3,
selected: true,
makeCode: "Make-B",
modelCode: "Model-c",
trimCode: "trim-a",
yearCode: "2014"
},
{
id: 25,
selected: true,
makeCode: "Make-C",
modelCode: "Model-b",
trimCode: "trim-b",
yearCode: "2012"
},
{
id: 26,
selected: true,
makeCode: "Make-C",
modelCode: "Model-b",
trimCode: "trim-a",
yearCode: "2013"
}结果对象
{
Make-A: {
Model-a: {
count: 1
}
}
},
{
Make-B: {
Model-c: {
count: 1
}
}
},
{
Make-C: {
Model-b: {
count: 2
}
}
}发布于 2016-10-19 19:51:40
由于您已经在使用lodash,所以可以利用.filter函数。这将只返回selected为真的项。
var selectedVehicles = _.filter(response.vehicleTypes, 'selected');现在您拥有了selectedVehicles数组,您可以使用原始代码按makeCode进行分组。
selectedVehicles = _.groupBy(selectedVehicles, function(item) {
return item.makeCode;
});这将返回一个对象,因此我们需要遍历这些键,并执行我们的第二个groupBy
_.forEach(selectedVehicles, function(value, key) {
selectedVehicles[key] = _.groupBy(selectedVehicles[key], function(item) {
return item.modelCode;
});
});由此,您将有一个对象的形式。我会让你从每个数组中得到计数。
{ 'Make-A': { 'Model-a': [ ... ] },
'Make-B': { 'Model-c': [ ... ] },
'Make-C': { 'Model-b': [ ..., ... ] } }发布于 2018-01-25 16:23:57
我不确定这是否能解决您的问题,但是在group_by中您可以添加允许创建复合键的自定义逻辑。
请记住,SEPERATOR值应该相应地定义为您使用的数据源,如果"--“字符出现在模型或类型中,则不应该使用它们,因为它将不允许您逆转分组过程。
const SEPERATOR = "--";
_.chain(data).filter((item) => item.selected).groupBy((item)=>`${item.model}${SEPERATOR}${item.type}`).value();发布于 2020-06-24 05:28:31
如果您专注于结果,下面的代码可以工作:
在我的例子中,Brand和Item Code是属性
const products = _.groupBy(this.productsTable.data, (item) => {
return [item['Brand'], item['Item Code']];
});https://stackoverflow.com/questions/40139667
复制相似问题