Javascript 如何对数据进行分组?

Javascript 如何对数据进行分组?,javascript,ecmascript-6,lodash,Javascript,Ecmascript 6,Lodash,如何编写脚本,将数组的元素分组为数组数组或数组对象,其中最后一个是按顺序分组的元素数组 若下一个元素Id是序列的一部分,那个么它将落入prev组,否则将创建新数组,元素将落入其中 如果元素Id高于上一个元素的Id大于1,则-是相同的序列=当前数组 如果元素Id高于上一个元素的Id大于2,则-is是下一个序列=下一个新数组 若元素所有边的邻居Id都大于当前Id,则当前元素将创建一个包含自身的数组,并且它的键将是它自己的Id 无论结果是数组还是对象,生成密钥都很容易,但现在对我来说,组元素很难 您可

如何编写脚本,将数组的元素分组为数组数组或数组对象,其中最后一个是按顺序分组的元素数组

若下一个元素Id是序列的一部分,那个么它将落入prev组,否则将创建新数组,元素将落入其中

如果元素Id高于上一个元素的Id大于1,则-是相同的序列=当前数组

如果元素Id高于上一个元素的Id大于2,则-is是下一个序列=下一个新数组

若元素所有边的邻居Id都大于当前Id,则当前元素将创建一个包含自身的数组,并且它的键将是它自己的Id

无论结果是数组还是对象,生成密钥都很容易,但现在对我来说,组元素很难

您可以尝试用JavaScript编写,甚至可以使用Lodash库

==========================================

const result = [
0/"1-4": [
    {id: 1},
    {id: 2},
    {id: 3},
    {id: 4}],
1/"7": [
    {id: 7}],
2/"9-10": [
    {id: 9},
    {id: 10}],
3/"12": [
    {id: 12}],
4/"14-16": [
    {id: 14},
    {id: 15},
    {id: 16}]];

您可以使用reduce创建一个数组数组,其中下一个预期数字是当前项目id加上一

常数数据=[ {id:1}, {id:2}, {id:3}, {id:7}, {id:9}, {id:10}, {id:12}, {id:14}, {id:15}, {id:16}] .sorta,b=>a.id-b.id///确保它按id排序 减少 [result,nextNum],item=>{//nextNum是下一个预期的数字 ifnextNum===未定义{//第一次未定义nextNum时 nextNum=item.id;//将nextNum设置为当前项的id result.push[];//添加空数组 } 如果!nextNum===item.id{//当前项id不是预期的下一个数字 result.push[];//添加空数组 } 结果[result.length-1].pushitem;//将项添加到数组数组的最后一个数组中 返回[result,item.id+1];//下一个预期数字是当前item id+1 }, [],未定义]//result和nextNum的初始值 ; console.logdata您可以使用链式调用来创建所需的结构:

const data=[{id:1}、{id:2}、{id:3}、{id:7}、{id:9}、{id:10}、{id:12}、{id:14}、{id:15}、{id:16}]; 常量arrayOfGroups=数据 .reducer,o,i=>{ //如果不是第一个序列,请添加新的子数组 如果!r.length | | o.id!==数据[i-1].id+1 r.push[]; //推送到最后一个子数组 r[r.length-1].pusho; 返回r; }, []; const objectOfGroups=arrayOfGroups.reducer,a,i=>{ const start=a[0].id; const end=a[a.length-1].id; //如果开始和结束相等,则将刚开始添加到主插入顺序,开始可以只是一个数字 常量键=开始===结束? `${i}/${start}`:`${i}/${start}-${end}`; r[key]=a; 返回r; }, {}; console.log'arrayOfGroups',arrayOfGroups;
log'objectOfGroups',objectOfGroups 您可以使用单循环方法,检查结果集的最后一个数组,并检查最后一个对象的id是否在所需范围内

如果不是,则向结果集中添加一个新的空数组。稍后将实际对象推送到最后一个数组

var data=[{id:1}、{id:2}、{id:3}、{id:7}、{id:9}、{id:10}、{id:12}、{id:14}、{id:15}、{id:16}], 分组=data.reducer,o=>{ var last=r[r.长度-1]; if!last | | last[last.length-1].id+1!==o.id{ r、 pushlast=[]; } last.pusho; 返回r; }, []; console.loggroup;
.作为控制台包装器{max height:100%!important;top:0;}这是作业吗?不-这是大工作任务的一部分,我在其中生成许多不同的数据,然后将其推送到库excelJs以生成xlsx文件报告。都做完了,但这一刻对我来说很难。简单uu0.groupBy,即使使用组合键进行分组,我认为也是无能为力的。哇!太神了谢谢我将仔细研究代码的逻辑。
const result = [
0/"1-4": [
    {id: 1},
    {id: 2},
    {id: 3},
    {id: 4}],
1/"7": [
    {id: 7}],
2/"9-10": [
    {id: 9},
    {id: 10}],
3/"12": [
    {id: 12}],
4/"14-16": [
    {id: 14},
    {id: 15},
    {id: 16}]];