Javascript 如何按id数组分组
大家好,你们能帮我减少阵列吗。我有两个数组,我需要在中间将其中一个数组分组。在这里,您可以找到示例 我有一个对象数组Javascript 如何按id数组分组,javascript,arrays,reduce,Javascript,Arrays,Reduce,大家好,你们能帮我减少阵列吗。我有两个数组,我需要在中间将其中一个数组分组。在这里,您可以找到示例 我有一个对象数组 const arr = [{ mid: 888, name: "test" }, { mid: 888, name: "test1" }, { mid: 888, name: "test2" }, { mid: 777, name: "test10" }, ] 但我需要一个小组,在中期前
const arr = [{
mid: 888,
name: "test"
},
{
mid: 888,
name: "test1"
},
{
mid: 888,
name: "test2"
},
{
mid: 777,
name: "test10"
},
]
但我需要一个小组,在中期前得到这样的东西
const arr = [{
mid: 888,
projects: [{
name: "test"
},
{
name: "test1"
},
{
name: "test2"
},
]
},
{
mid: 777,
projects: [{
name: "test10"
}, ]
}
]
const arr=[{
中期:888,
名称:“测试”
},
{
中期:888,
名称:“test1”
},
{
中期:888,
名称:“test2”
},
{
年中:777,
名称:“test10”
}
];
让newArray=[]
arr.map(item=>item.mid).filter((值、索引、self)=>{
返回self.indexOf(value)==索引;
}).forEach((mid)=>{
newArray.push({
中间,
项目:arr.filter(item=>item.mid==mid).map(item=>{return{name:item.name};})
})
})
console.log(newArray)
这不是最快的方法,但通过试验代码片段,可能有助于更好地理解reduce函数)
让arr=[{
中期:888,
名称:“测试”
},
{
中期:888,
名称:“test1”
},
{
中期:888,
名称:“test2”
},
{
年中:777,
名称:“test10”
},
]
let reduced=arr.reduce((上一个,现在)=>{
//第一次迭代,prev==[]
//现在=={mid:888,name:'test'}
让index=prev.map(e=>e.mid).indexOf(now.mid);
if(~index){//if找到索引
prev[index].projects.push({
姓名:now.name
})
}否则{
上推({
现在,现在,
项目:[{
姓名:now.name
}]
})
}
返回上一个;
}, []); /* 从空数组开始*/
控制台日志(减少)代码>您可以这样对它进行分组
var groupedData = _.mapValues(_.groupBy(arr, 'mid'),
clist => clist.map(car => _.omit(car, 'mid')));
结果将是
{888: [{
name: test
},
{
name: test1
},
{
name: test2
},
],
777: [{
name: test10
} ]}
下面是一个reduce
函数如何使用filter
和三元大小写实现这一功能:
const arr=[{mid:888,name:“test”},
{mid:888,名称:“test1”},
{mid:888,名称:“test2”},
{mid:777,名称:“test10}];
设newArray=arr.reduce(函数(r,行){
设dt=r.filter(x=>x.mid==row.mid);
dt.length?dt[0].projects.push(row.name):r.push({mid:row.mid,projects:[row.name]});
返回r;
}, []);
log(newArray)代码>