数组数组中的对象数组-JS

Group array of objects in array of arrays -JS

我正在尝试通过对象中的 'group' 键对数组数组中的对象数组进行分组。

当前数组:

array =
[
    [{name:’a’,age:’4’,group:’15’},{name:’b’,age:’4’,group:’15’}, 
     {name:’c’,age:’4’,group:’15’}],
    [{name:’aa’,age:’6’,group:’12’},{name:’bb’,age:’6’,group:’12’}],
    [{name:’d’,age:’5’,group:’15’},{name:’e’,age:’5’,group:’15’}, 
     {name:’f’,age:’5’,group:’15’}],
    [{name:’dd’,age:’7’,group:’12’}, 
     {name:’ee’,age:’7’,group:’12’{name:’ff’,age:’7’,group:’12’}]
]

我想要一个如下所示的数组:

newArray=  [
        {15:[[{name:’a’,age:’4’,group:’15’},{name:’b’,age:’4’,group:’15’}, 
              {name:’c’,age:’4’,group:’15’}],[{name:’d’,age:’5’,group:’15’}, 
              {name:’e’,age:’5’,group:’15’},{name:’f’,age:’5’,group:’15’}]
        },
        {12:[[{name:’aa’,age:’6’,group:’12’},{name:’bb’,age:’6’,group:’12’}],
            [{name:’dd’,age:’7’,group:’12’},{name:’ee’,age:’7’,group:’12’}, 
             {name:’ff’,age:’7’,group:’12’}]]
        }
    ]

谢谢!

你可以使用 Reduce:

做这样的事情

array =
[
    [{name:'a',age:'4',group:'15'},
     {name:'b',age:'9',group:'15'}, 
     {name:'c',age:'6',group:'15'},
     {name:'c',age:'8',group:'15'},
     {name:'c',age:'4',group:'15'}],
    [{name:'aa',age:'6',group:'12'}]
];
const groupByAge = (acc, elem)=>{
    acc[elem.age] = acc[elem.age]?  [...acc[elem.age],elem] : [elem];
    return acc
}
var res = array.reduce((acc, elem)=>{
var key = "";
  elem.forEach(k=> {
       key  = k.group;
       acc[k.group] = acc[k.group] ?  [...acc[k.group], k] : [k];
   });
  var temp= acc[key].reduce(groupByAge, {});
  acc[key] = Object.values(temp);
  return acc
},{});

console.log([res])

扁平化数组。
按组和年龄创建对象映射。
提取对象映射中每个键的单个对象,并将年龄对象解包到数组。
ages是数字,ES2015排序的是整数索引,所以顺序已经按age排序了

注意:由于使用了非标准单引号,您的 JavaScript 数据对象无效 JavaScript。并且您的数据中有未闭合的括号。解析为已清理为 JSON.

的字符串

res = 
Object.entries(
array.flat().reduce((res,x)=>{
  const {age, group} = x
  res[group] = res[group] || {}
  res[group][age] = res[group][age] || []
  res[group][age].push(x)
  return res
},{})
).map(([k,v])=>({[k]: Object.values(v)}))

console.log(res)
<script>
array =
JSON.parse(`[
    [{name:’a’,age:’4’,group:’15’},{name:’b’,age:’4’,group:’15’}, 
     {name:’c’,age:’4’,group:’15’}],
    [{name:’aa’,age:’6’,group:’12’},{name:’bb’,age:’6’,group:’12’}],
    [{name:’d’,age:’5’,group:’15’},{name:’e’,age:’5’,group:’15’}, 
     {name:’f’,age:’5’,group:’15’}],
    [{name:’dd’,age:’7’,group:’12’}, 
     {name:’ee’,age:’7’,group:’12’},{name:’ff’,age:’7’,group:’12’}]
]`.replace(/’/g,'"').replace(/(name|age|group)/g,'""'))
</script>