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

我有一个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 },
 { 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');
“它不起作用”和“我一直不成功”是不可接受的问题陈述。请清楚地定义问题,并用标题描述它。谢谢。