我有两个数组:
array1 = [{
"type":"test",
"name":"name1"},
{
"type":"dev",
"name":"name2"}]
array2=[{
"type":"test",
"name":"name3"},
{
"type":"dev",
"name":"name4"},
{
"type":"prod",
"name":"name5"}]
我想用“type”对两个数组进行分组,并创建一个像这样的新数组:
finalArray=[{
"type":"test",
"info":[{
"type":"test",
"name":"name1"}],
[{
"type":"test",
"name":"name3"
}]},
{
"type":"dev",
"info":[{
"type":"dev",
"name":"name2"}],
[{
"type":"dev",
"name":"name4"}]},
{
"type":"prod",
"info":[],
[{
"type":"prod",
"name":"name5"}]
}]
无论如何,我可以使用javascript,angularjs2,lodash,jquery实现这一点.我可以按照using lodash .groupBy. how to add your own keys for grouped output?中的提法分组和创建新对象
但唯一的事情总是我想从第二个数组推送“info”的index = 1中的数据,第一个数据推送到index = 0.如果任何数组没有“type”,那么“info”数组应该有空/ null值.
解决方法:
可以在javascript中实现您想要的结果,或者使用像lodash这样的帮助器.
你问题的最后一部分很难理解.如果数组没有“类型”,您将如何对它们进行分组.请提供更清晰的解释或修改您的预期输入和输出.
[更新]
谢谢你的解释.这是使用普通javascript的解决方案.
// get uniques type from two arrays
const uniqueTypes = new Set(array1
.concat(array2)
.map(x => x.type));
// loop the types, find item in both array
// group it
let result = Array.from(uniqueTypes).reduce((acc, curr) => {
const item1 = array1.find(x => x.type === curr);
const item2 = array2.find(x => x.type === curr);
const info1 = item1 ? [item1] : [];
const info2 = item2 ? [item2] : [];
acc = acc.concat({ type: curr, info: [info1, info2] });
return acc;
}, []);
console.log(result);
jsbin这里:https://jsbin.com/mobezogaso/edit?js,console