数组数组中的对象数组-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>
我正在尝试通过对象中的 '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>