JavaScript-将项目分组到数组中
我有一个JavaScript数组,如下所示:JavaScript-将项目分组到数组中,javascript,arrays,Javascript,Arrays,我有一个JavaScript数组,如下所示: var items = [ { id:1, group:'Produce', name:'Apple', weight: 0.5 }, { id:2, group:'Produce', name:'Banana', weight: 0.2 }, { id:3, group:'Meat', name:'Beef', weight: 1.0 }, { id:4, group:'Meat', name:'Chicken', weight: 0.75
var items = [
{ id:1, group:'Produce', name:'Apple', weight: 0.5 },
{ id:2, group:'Produce', name:'Banana', weight: 0.2 },
{ id:3, group:'Meat', name:'Beef', weight: 1.0 },
{ id:4, group:'Meat', name:'Chicken', weight: 0.75 },
{ id:5, group:'Dairy', name:'Milk', weight:1.0 }
];
我想查看这个数组,并按组动态地将它们放入数组中。我尝试了以下方法,但无效:
var groups = [];
for (var i = 0; i<items.length; i++) {
var groupName = items[i].group;
if (groups.includes(groupName) === false) {
groups[groupName] = new Array();
}
groups[groupName].push(items[i]);
}
var组=[];
对于(var i=0;i您的组
应该是一个对象
然后您要测试组。包括(groupName)
,但它是,您要创建一个哈希表
相反,检查组[groupName]==未定义的对象上是否存在该键
var groups = {};
for (var i = 0; i<items.length; i++) {
var groupName = items[i].group;
if (groups[groupName] === undefined) {
groups[groupName] = new Array();
}
groups[groupName].push(items[i]);
}
var-groups={};
对于(var i=0;i,我建议您采用以下简单的解决方案
var项目=[
{id:1,组:'product',名称:'Apple',重量:0.5},
{id:2,组:'product',名称:'Banana',重量:0.2},
{id:3,组:'肉',名称:'牛肉',重量:1.0},
{id:4,组:'肉',名称:'鸡',重量:0.75},
{id:5,组:'Dairy',名称:'Milk',重量:1.0}
],obj={};
items.forEach(c=>(obj[c.group]| |(obj[c.group]=[])).push(c));
console.log(obj);
您可以只使用一个对象并检查键是否存在。如果不存在,则使用一个新数组
var items=[{id:1,组:农产品,名称:苹果,重量:0.5},{id:2,组:农产品,名称:香蕉,重量:0.2},{id:3,组:肉,名称:牛肉,重量:1.0},{id:4,组:肉,名称:鸡,重量:0.75},{id:5,组:乳制品,名称:牛奶,重量:1.0},],
groups=Object.create(null),//获取一个真正空的对象
组名,
我
对于(i=0;i
.as控制台包装{max height:100%!important;top:0;}
另一种选择是使用reduce:
var项目=[
{id:1,组:'product',名称:'Apple',重量:0.5},
{id:2,组:'product',名称:'Banana',重量:0.2},
{id:3,组:'肉',名称:'牛肉',重量:1.0},
{id:4,组:'肉',名称:'鸡',重量:0.75},
{id:5,组:'Dairy',名称:'Milk',重量:1.0}
];
const group=项目。减少((累计,项目)=>{
累计[项目组]=累计[项目组]?累计[项目组].concat(项目):[项目];
返回累计;
}, {});
console.log(分组);
我一直使用lodash或下划线
但是,请尝试使用reduce函数
var items = [
{ id:1, group:'Produce', name:'Apple', weight: 0.5 },
{ id:2, group:'Produce', name:'Banana', weight: 0.2 },
{ id:3, group:'Meat', name:'Beef', weight: 1.0 },
{ id:4, group:'Meat', name:'Chicken', weight: 0.75 },
{ id:5, group:'Dairy', name:'Milk', weight:1.0 }
];
Array.prototype.groupDynamically = function(prop) {
return this.reduce(function(groups, item) {
var val = item[prop];
groups[val] = groups[val] || [];
groups[val].push(item);
return groups;
}, {});
}
//Then in your case say
var groups = items.groupDynamically('group');
“它不起作用”和“我一直不成功”是不可接受的问题陈述。请清楚地定义问题,并用标题描述它。谢谢。