根据数组中的值将单个数组拆分为多个数组。JavaScript

根据数组中的值将单个数组拆分为多个数组。JavaScript,javascript,arrays,Javascript,Arrays,这是上一个关于分组的问题的延续。我在下面有一个结构文件,我想做什么,而不是简单地隔离一个id,我想在整个数组中循环(想象1000多个id),并为每个id创建单独的数组,然后我可以对它们做进一步的工作。因此,在下面的示例中,id1将在一个数组中分组,id2将在另一个数组中分组。一旦我将每个ID分离成一个单独的数组,我将继续根据一组条件进一步过滤每个ID [{col1: 'id1', col2: '123', col3: '12/01/12'}, {col1: 'id1', col2: '100',

这是上一个关于分组的问题的延续。我在下面有一个结构文件,我想做什么,而不是简单地隔离一个id,我想在整个数组中循环(想象1000多个id),并为每个id创建单独的数组,然后我可以对它们做进一步的工作。因此,在下面的示例中,id1将在一个数组中分组,id2将在另一个数组中分组。一旦我将每个ID分离成一个单独的数组,我将继续根据一组条件进一步过滤每个ID

[{col1: 'id1', col2: '123', col3: '12/01/12'},
{col1: 'id1', col2: '100', col3: '12/01/12'},
{col1: 'id2', col2: '-100', col3: '12/01/12'},
{col1: 'id2', col2: '123', col3: '13/01/12'}]

如果您能就如何分解阵列以及如何调用单个ID阵列提供任何建议,我们将不胜感激


提前感谢

您可以使用给定的id作为对象的键,并在自己的数组中收集项目

var data=[{col1:'id1',col2:'123',col3:'12/01/12'},{col1:'id1',col2:'100',col3:'12/01/12'},{col1:'id2',col2:'123',col3:'13/01/12'},],
object=data.reduce(函数(r,o){
r[o.col1]=r[o.col1]| |[];
r[o.col1].推(o);
返回r;
},Object.create(null));
console.log(对象)

.as console wrapper{max height:100%!important;top:0;}
您可以使用给定的id作为对象的键,并在自己的数组中收集项

var data=[{col1:'id1',col2:'123',col3:'12/01/12'},{col1:'id1',col2:'100',col3:'12/01/12'},{col1:'id2',col2:'123',col3:'13/01/12'},],
object=data.reduce(函数(r,o){
r[o.col1]=r[o.col1]| |[];
r[o.col1].推(o);
返回r;
},Object.create(null));
console.log(对象)

.as console wrapper{max height:100%!important;top:0;}
如果要将相同ID的数组组合在一起,请尝试下面的代码

var a=[{col1:'id1',col2:'123',col3:'12/01/12'},
{col1:'id1',col2:'100',col3:'12/01/12'},
{col1:'id2',col2:'-100',col3:'12/01/12'},
{col1:'id2',col2:'123',col3:'13/01/12'}];
var currentID=a[0].col1;
var组=[];
var collectionOfIDs=[];
a、 forEach(函数(v,i){
//控制台日志(i,v);
if(currentID==v.col1){
采集FIDS推送(v);
}否则{
组推(收集FIDS);
currentID=v.col1;
采集FIDS=[v];
}
});
组推(收集FIDS);

console.log(group)
如果要将相同ID的数组组合在一起,请尝试下面的代码

var a=[{col1:'id1',col2:'123',col3:'12/01/12'},
{col1:'id1',col2:'100',col3:'12/01/12'},
{col1:'id2',col2:'-100',col3:'12/01/12'},
{col1:'id2',col2:'123',col3:'13/01/12'}];
var currentID=a[0].col1;
var组=[];
var collectionOfIDs=[];
a、 forEach(函数(v,i){
//控制台日志(i,v);
if(currentID==v.col1){
采集FIDS推送(v);
}否则{
组推(收集FIDS);
currentID=v.col1;
采集FIDS=[v];
}
});
组推(收集FIDS);

console.log(组)
期望的结果是什么样的?有没有关于分解阵列的最佳方法的建议。。。看起来有点哲学?什么是最好的?表演可读性?你能提供预期的输出格式吗?@ibrahimmahrir我的意思是说实际上完成了任务!下一次@Pankaj(与单个ID关联的不同数组)一定会更好地框定我的问题,在实际数据集中,一个ID可能有100行与其关联,然后我想对其进行进一步操作。下面提供的两种解决方案都很好地完成了这项工作。预期结果如何?有没有关于分解阵列的最佳方法的建议。。。看起来有点哲学?什么是最好的?表演可读性?你能提供预期的输出格式吗?@ibrahimmahrir我的意思是说实际上完成了任务!下一次@Pankaj(与单个ID关联的不同数组)一定会更好地框定我的问题,在实际数据集中,一个ID可能有100行与其关联,然后我想对其进行进一步操作。下面提供的两种解决方案都很好地完成了这项工作。如果您想要控制分组数据的结构,那么上面的代码很有用&如果需要,那么使用它,否则请使用@Nina提供的解决方案,如果该结构适合进一步的解决方案。谢谢-两种方法都非常有效-您能解释一下这与Ninas的区别吗?两者似乎都让我可以控制新分组的数据。所谓“控制结构”,我的意思是,在创建分组数据本身时,您可以根据需要调整结构,例如使用数组数组或键为ID的对象对象。有关Ninas答案的更多信息,请参阅reduce API-再次感谢-非常感谢help@Vinayaki-作为跟进:如果我尝试访问位于id1的数据,我可以访问与该id关联的所有数据,但如果我想获取与该id关联的所有col2值,我将获取未定义的值。我尝试了以下操作:console.log(组[1].col2);另一种选择是:console.log(组[1][1].col2),但这只提供了分组数组的一个元素。当我想记录与该列相关的所有数据时,是否有一种有效的方法,或者我必须创建一个循环,循环通过每个ID,然后循环到该ID数组中的每个数组?谢谢如果你想控制分组数据的结构,那么上面的代码很有用&如果需要,那么就使用它,如果@Nina给出的解决方案适合进一步的解决方案,那么就使用它。谢谢-这两个代码都非常有效-你能解释一下这与Ninas有什么不同吗?两者似乎都让我可以控制新的分组数据。所谓“控制结构”,我的意思是,在创建分组数据本身时,您可以根据需要调整结构,例如