基于键对数组项进行分组';javascript中的s值
我有一个数据数组,如下所示基于键对数组项进行分组';javascript中的s值,javascript,arrays,reduce,Javascript,Arrays,Reduce,我有一个数据数组,如下所示 const data = [ { "SurveyGroupID": 28, "SurveyGroupTypeID": 4, "SurveyID": 23, "SurveyGroupSequence": 1, "SurveyQuestionSequence": 1,
const data = [
{
"SurveyGroupID": 28,
"SurveyGroupTypeID": 4,
"SurveyID": 23,
"SurveyGroupSequence": 1,
"SurveyQuestionSequence": 1,
"Question": "What is your reason for visiting our practice?",
"DataTypeName": "Memo",
"DataTypeID": 4,
"Required": true
},
{
"SurveyGroupID": 28,
"SurveyGroupTypeID": 4,
"SurveyID": 23,
"SurveyGroupSequence": 2,
"SurveyQuestionSequence": 2,
"Question": "What is your height?",
"DataTypeName": "String",
"DataTypeID": 2,
"Required": true
},
{
"SurveyGroupID": 28,
"SurveyGroupTypeID": 4,
"SurveyID": 23,
"SurveyGroupSequence": 1,
"SurveyQuestionSequence": 3,
"Question": "What is your weight?",
"DataTypeName": "Integer",
"DataTypeID": 3,
"Required": true
},
]
我需要根据键的值对数组进行分组。也就是说,我需要将数组项分组到一个字段
键,该键具有相同的SurveyGroupSequence
值
导致
[
{
"fields": [
{
"SurveyGroupTypeID": "1",
"Question": "What is your reason for visiting our practice?"
},
{
"SurveyGroupTypeID": "1",
"Question": "What is your weight?"
}
]
},
{
"fields": [
{
"SurveyGroupTypeID": "2",
"Question": "What is your height?"
}
]
}
]
我怎样才能做到这一点?多谢各位
我试过的
使用对象映射按键收集SurveyGroupSequence作为SurveyGroupTypeID:
函数groupByID(数据){
console.log(
Object.values(data.reduce((acc,{SurveyGroupSequence:SurveyGroupTypeID,Question})=>{
if(acc[SurveyGroupTypeID])
acc[SurveyGroupTypeID]。推送({SurveyGroupTypeID,问题})
其他的
acc[SurveyGroupTypeID]=[{SurveyGroupTypeID,问题}]
返回acc;
},{}))
)
}
常数数据=[
{
“SurveyGroupID”:28,
“SurveyGroupTypeID”:4,
“被调查者”:23,
“SurveyGroupSequence”:1,
“调查问题顺序”:1,
“问题”:“您访问我们机构的原因是什么?”,
“数据类型名称”:“备忘录”,
“数据类型ID”:4,
“必需”:true
},
{
“SurveyGroupID”:28,
“SurveyGroupTypeID”:4,
“被调查者”:23,
“SurveyGroup序列”:2,
“调查问题顺序”:2,
“问题”:“你的身高是多少?”,
“DataTypeName”:“字符串”,
“数据类型ID”:2,
“必需”:true
},
{
“SurveyGroupID”:28,
“SurveyGroupTypeID”:4,
“被调查者”:23,
“SurveyGroupSequence”:1,
“调查问题顺序”:3,
“问题”:“你的体重是多少?”,
“DataTypeName”:“整数”,
“数据类型ID”:3,
“必需”:true
},
]
groupByID(数据)
使用对象映射按键收集SurveyGroupSequence作为SurveyGroupTypeID:
函数groupByID(数据){
console.log(
Object.values(data.reduce((acc,{SurveyGroupSequence:SurveyGroupTypeID,Question})=>{
if(acc[SurveyGroupTypeID])
acc[SurveyGroupTypeID]。推送({SurveyGroupTypeID,问题})
其他的
acc[SurveyGroupTypeID]=[{SurveyGroupTypeID,问题}]
返回acc;
},{}))
)
}
常数数据=[
{
“SurveyGroupID”:28,
“SurveyGroupTypeID”:4,
“被调查者”:23,
“SurveyGroupSequence”:1,
“调查问题顺序”:1,
“问题”:“您访问我们机构的原因是什么?”,
“数据类型名称”:“备忘录”,
“数据类型ID”:4,
“必需”:true
},
{
“SurveyGroupID”:28,
“SurveyGroupTypeID”:4,
“被调查者”:23,
“SurveyGroup序列”:2,
“调查问题顺序”:2,
“问题”:“你的身高是多少?”,
“DataTypeName”:“字符串”,
“数据类型ID”:2,
“必需”:true
},
{
“SurveyGroupID”:28,
“SurveyGroupTypeID”:4,
“被调查者”:23,
“SurveyGroupSequence”:1,
“调查问题顺序”:3,
“问题”:“你的体重是多少?”,
“DataTypeName”:“整数”,
“数据类型ID”:3,
“必需”:true
},
]
groupByID(数据)
您可以这样做
const surveyGroupTypeMap={};
data.forEach({SurveyGroupTypeID,Question})=>{
if(surveyGroupTypeMap[SurveyGroupTypeID]){
surveyGroupTypeMap[SurveyGroupTypeID]。推送(问题);
}否则{
surveyGroupTypeMap[SurveyGroupTypeID]=[问题];
}
});
常量结果=[];
key(surveyGroupTypeMap).forEach(id=>{
结果:推({
字段:surveyGroupTypeMap[id].map(问题=>({
SurveyGroupTypeID:id,问题:问题
}))
});
});
控制台日志(结果);
您可以这样做
const surveyGroupTypeMap={};
data.forEach({SurveyGroupTypeID,Question})=>{
if(surveyGroupTypeMap[SurveyGroupTypeID]){
surveyGroupTypeMap[SurveyGroupTypeID]。推送(问题);
}否则{
surveyGroupTypeMap[SurveyGroupTypeID]=[问题];
}
});
常量结果=[];
key(surveyGroupTypeMap).forEach(id=>{
结果:推({
字段:surveyGroupTypeMap[id].map(问题=>({
SurveyGroupTypeID:id,问题:问题
}))
});
});
控制台日志(结果);
const ar1 = [];
data.forEach((Element, index) => {
const fields = [{
"SurveyGroupTypeID": Element.SurveyGroupTypeID,
"Question": Element.Question
}]
ar1.push({
fields : fields
})
})