javascript - 如何使用 jquery javascript 对数组项元素进行分组,这些元素使用与项不同的对象,值

标签 javascript jquery angularjs

我正在尝试通过 jQuery 中的 Id、我的代码的详细信息以及我想要实现的目标对我的数组进行分组。

我的数组是这样的:

var array = [
    {id:1, value:1}, 
    {id:1, value:2},
    {id:1, value:3},
    {id:2, value:4},
    {id:2, value:5},
    {id:2, value:6}, 
    {id:3, value:7},
    {id:3, value:8},
    {id:3, value:1},
    {id:4, value:2},
    {id:4, value:3},
    {id:4, value:4},
    {id:6, value:5},
    {id:6, value:1},
    {id:6, value:2},
    {id:12, value:3},
    {id:12, value:4},
    {id:12, value:5},
    {id:1, value:"a"},
    {id:1, value:"b"},
    {id:1, value:"c"},
    {id:2, value:4},
    {id:2, value:5},
];

想要的结果应该是

var output = [
{
id:1,
group:[
    {value:1}, 
    {value:2},
    {value:3},
  ]
},
{
id:2,
group:[
    {value:4},
    {value:5},
    {value:6},
  ]
},
  {
id:3,
group:[
    {value:7},
    {value:8},
    {value:1},
  ]
},
{
id:4,
group:[
    {value:2},
    {value:3},
    {value:4},
  ]
},
{
id:6,
group:[
    {value:5},
    {value:1},
    {value:2},
  ]
},
{
id:12,
group:[
    {value:3},
    {value:4},
    {value:5},
  ]
},
{
id:1,
group:[
    {value:a},
    {value:b},
    {value:c},
  ]
}
{
id:2,
group:[
    {value:4},
    {value:5} 
   ]
}
];

是否有一个有用的脚本,或者我应该坚持使用 js,然后循环遍历生成的对象来完成我自己?

我正在尝试:

var array1 = [
    {id:1, value:1}, 
    {id:1, value:2},
    {id:1, value:3},
    {id:2, value:4},
    {id:2, value:5},
    {id:2, value:6}, 
    {id:3, value:7},
    {id:3, value:8},
    {id:3, value:1},
    {id:4, value:2},
    {id:4, value:3},
    {id:4, value:4},
    {id:6, value:5},
    {id:6, value:1},
    {id:6, value:2},
    {id:12, value:3},
    {id:12, value:4},
    {id:12, value:5},
    {id:1, value:"a"},
    {id:1, value:"b"},
    {id:1, value:"c"},
    {id:2, value:4},
    {id:2, value:5},
];


var FinalArray=[];
for(i=0;i<array1.length;i++)
{ 
    var newArray={id:array1[i].id,group:{value:[]}};
    var group={value:[]};
    newArray.group=group;

    if(newArray.id == array1[i].id){
        for(j=i;j<array1.length;j++)
        {
            if(array1[i].id==array1[j].id)
            {
                group.value.push(array1[j].value);
            }   
        }
    }

    var IsAddeble=true;

    if(FinalArray.length>0)
    {
        for(k=0;k<FinalArray.length;k++)
        {
            if(FinalArray[FinalArray.length-1].id==array1[i].id)
            {
                IsAddeble=false;
            } 
        }    
    }
    if(IsAddeble){  
        FinalArray.push(newArray);
    }
}
console.log(FinalArray);

有什么解决方案吗?

最佳答案

您可以检查结果数组的最后一项并在 group 中插入一个新对象或创建一个新的组对象。

var array = [{ id: 1, value: 1 }, { id: 1, value: 2 }, { id: 1, value: 3 }, { id: 2, value: 4 }, { id: 2, value: 5 }, { id: 2, value: 6 }, { id: 3, value: 7 }, { id: 3, value: 8 }, { id: 3, value: 1 }, { id: 4, value: 2 }, { id: 4, value: 3 }, { id: 4, value: 4 }, { id: 6, value: 5 }, { id: 6, value: 1 }, { id: 6, value: 2 }, { id: 12, value: 3 }, { id: 12, value: 4 }, { id: 12, value: 5 }, { id: 1, value: "a" }, { id: 1, value: "b" }, { id: 1, value: "c" }, { id: 2, value: 4 }, { id: 2, value: 5 }],
    result = array.reduce((r, { id, value }) => {
        var last = r[r.length - 1];
        if (last && last.id === id) {
            last.group.push({ value });
        } else {
            r.push({ id, group: [{ value }] });
        }
        return r;
    }, [])

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何使用 jquery javascript 对数组项元素进行分组,这些元素使用与项不同的对象,值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51337520/

相关文章:

javascript - Titanium Mobile 在 iOS 上没有获得正确的准确性

javascript - jQuery/Javascript 函数延迟运行,直到另一个函数完成(如果需要)

javascript - 使用 jQuery 的 AJAX 调用中的 url 字段格式

javascript - qTip 在每个之后更改特定工具提示的文本

javascript - 计算给定输入的出现次数

javascript - AngularJS - 将 $setValidity 与 ng-repeat 指令一起使用

angularjs - 基于路由隐藏ng-view DOM之外的元素

javascript - 如何仅在第一次打开应用程序时在 Ionic 中显示 Controller ?

javascript - jQuery 验证复选框自定义值规则

javascript - 从特定类的所有选定选项创建数组