根据 javascript 中的键值对数组项进行分组
Group array items based on a key's value in javascript
我有一个数据数组如下
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
},
]
我需要group the array based on a key's value
。那就是我需要将数组项组合到具有相同 SurveyGroupSequence
值
的 fields
键
导致
[
{
"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?"
}
]
}
]
我怎样才能做到这一点?谢谢。
我试过的
const ar1 = [];
data.forEach((Element, index) => {
const fields = [{
"SurveyGroupTypeID": Element.SurveyGroupTypeID,
"Question": Element.Question
}]
ar1.push({
fields : fields
})
})
使用对象映射通过键 SurveyGroupSequence 收集为 SurveyGroupTypeID:
function groupByID(data){
console.log(
Object.values(data.reduce((acc,{SurveyGroupSequence: SurveyGroupTypeID, Question})=>{
if( acc[SurveyGroupTypeID] )
acc[SurveyGroupTypeID].push({SurveyGroupTypeID, Question})
else
acc[SurveyGroupTypeID] = [{SurveyGroupTypeID, Question}]
return acc;
},{}))
)
}
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
},
]
groupByID(data)
你可以这样做
const surveyGroupTypeMap = {};
data.forEach(({SurveyGroupTypeID, Question}) => {
if (surveyGroupTypeMap[SurveyGroupTypeID]) {
surveyGroupTypeMap[SurveyGroupTypeID].push(Question);
} else {
surveyGroupTypeMap[SurveyGroupTypeID] = [Question];
}
});
const result = [];
Object.keys(surveyGroupTypeMap).forEach(id => {
result.push({
fields: surveyGroupTypeMap[id].map(question => ({
SurveyGroupTypeID: id, Question: question
}))
});
});
console.log(result);
我有一个数据数组如下
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
},
]
我需要group the array based on a key's value
。那就是我需要将数组项组合到具有相同 SurveyGroupSequence
值
fields
键
导致
[
{
"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?"
}
]
}
]
我怎样才能做到这一点?谢谢。
我试过的
const ar1 = [];
data.forEach((Element, index) => {
const fields = [{
"SurveyGroupTypeID": Element.SurveyGroupTypeID,
"Question": Element.Question
}]
ar1.push({
fields : fields
})
})
使用对象映射通过键 SurveyGroupSequence 收集为 SurveyGroupTypeID:
function groupByID(data){
console.log(
Object.values(data.reduce((acc,{SurveyGroupSequence: SurveyGroupTypeID, Question})=>{
if( acc[SurveyGroupTypeID] )
acc[SurveyGroupTypeID].push({SurveyGroupTypeID, Question})
else
acc[SurveyGroupTypeID] = [{SurveyGroupTypeID, Question}]
return acc;
},{}))
)
}
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
},
]
groupByID(data)
你可以这样做
const surveyGroupTypeMap = {};
data.forEach(({SurveyGroupTypeID, Question}) => {
if (surveyGroupTypeMap[SurveyGroupTypeID]) {
surveyGroupTypeMap[SurveyGroupTypeID].push(Question);
} else {
surveyGroupTypeMap[SurveyGroupTypeID] = [Question];
}
});
const result = [];
Object.keys(surveyGroupTypeMap).forEach(id => {
result.push({
fields: surveyGroupTypeMap[id].map(question => ({
SurveyGroupTypeID: id, Question: question
}))
});
});
console.log(result);