Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将数组排序为子数组_Javascript_Arrays - Fatal编程技术网

Javascript 如何将数组排序为子数组

Javascript 如何将数组排序为子数组,javascript,arrays,Javascript,Arrays,请帮忙完成这项任务。 有一个对象数组: [ {id: 0, title: 'title_1', step: 3}, {id: 1, title: 'title_2', step: 2}, {id: 2, title: 'title_3', step: 3}, {id: 3, title: 'title_4', step: 1}, {id: 4, title: 'title_5', step: 2}, ... ] 如何将此阵列转换为此阵列 [ [ {id: 0

请帮忙完成这项任务。 有一个对象数组:

[
  {id: 0, title: 'title_1', step: 3},
  {id: 1, title: 'title_2', step: 2},
  {id: 2, title: 'title_3', step: 3},
  {id: 3, title: 'title_4', step: 1},
  {id: 4, title: 'title_5', step: 2},
  ...
]
如何将此阵列转换为此阵列

[
  [
    {id: 0, title: 'title_1', step: 3},
    {id: 2, title: 'title_3', step: 3},
  ],
  [
    {id: 3, title: 'title_4', step: 1},
  ],
  [
    {id: 1, title: 'title_2', step: 2},
    {id: 4, title: 'title_5', step: 2},
  ],
  ...
]
也就是说,使用step属性将其拆分为对象的子阵列


谢谢

您可以使用
Array.prototype.reduce()
方法通过step属性获取子数组。使用reduce方法遍历数组,将step作为键,并基于该键创建子数组(step)。最后,使用
Object.values()
方法获取所有值

const数据=[
{id:0,title:'title_1',步骤:3},
{id:1,title:'title_2',步骤:2},
{id:2,title:'title_3',步骤:3},
{id:3,title:'title_4',步骤:1},
{id:4,标题:'title_5',步骤:2},
];
const ret=Object.values(
数据减少((上一个,c)=>{
常数p=上一个;
常数键=c步;
p[键]=p[键]??[];
p[键]。按(c);
返回p;
}, {})
);

控制台日志(ret)此版本在算法上与mr hr的版本相似。它只是用我喜欢的无变异风格写的。它的性能较差,但在我看来更容易理解。但是YMMV

constgrouparrayby=(prop)=>(arr)=>
对象。值(
arr.reduce((a,x)=>({…a[x[prop]]:[…(a[x[prop]]| |[]),x],{})
)
const input=[{id:0,title:'title_1',step:3},{id:1,title:'title_2',step:2},{id:2,title:'title_3',step:3},{id:3,title:'title_4',step:1},{id:4,title:'title_5',step:2}]
console.log(groupArrayBy('step')(输入))

。作为控制台包装{max height:100%!important;top:0}
步长是否总是小于索引的最大值?