如何将对象动态添加到对象的 属性?
How do I dynamically add objects to an object's property?
我正在构建问卷,问题可以有多个答案,我需要构建一个问题和答案数组,例如:
{
question: 'question',
answer: {id: 1, answers: 'answer 1'},
{id: 2, answer: 'answer 2'}
}
我需要显示用户选择的问题和答案的摘要。
例如:问题:您住在以下哪个州?
答案:阿拉巴马州、阿拉斯加州、新泽西州、罗得岛州。
生成的对象可能是:
{
question: 'Which of these states have you lived in?',
answer: {id: 1, answer: 'Alaska'},
{id: 3, answer: 'Rhode Island'}
}
如何在问题只显示一次的情况下动态添加答案?
我试过了:
var questionAnswerObject = [];
angular.forEach(answersObject, function(value, key){
questionAnswerObject.push({
question: question.question,
answer: value.answer
});
});
但当然它会显示两次问题。
你遗漏了一些非常重要的东西:你需要 answers
成为一个包含所有答案的数组(或对象)。您不能按照您尝试的方式将多个对象分配给一个值 - 它们需要以某种方式包装。
因此,例如,您的答案对象可能如下所示:
var answerObject = {
question: 'My Question',
answers: [
{id: 1, answer: 'first answer'},
{id: 2, answer: 'second answer'}
]
}
或者,您可以 answers
像这样制作问题 ID 的地图:
var answerObject = {
question: 'My Question',
answers: {
1: 'first answer',
2: 'second answer'
}
}
要在第一个示例中添加答案,只需执行以下操作:
answerObject.answers.push( {id: 3, answer: 'new answer'} );
要在第二个示例中添加答案,只需执行以下操作:
answerObject.answers[3] = 'new answer';
我对你的看法是指你的最终目标是像这个问题和一系列答案
var arrayObjQuestions = [{
question: 'question',
answer: [{id: 1, answers: 'answer 1'},
{id: 2, answer: 'answer 2'}]
},...];
所以如果循环抛出你有的问题并添加答案如下
arrayObjQuestions[0].answer.push({id:1, answer: "answer 1"});
arrayObjQuestions[0].answer.push({id:2, answer: "answer 2"});
arrayObjQuestions[0].answer.push({id:3, answer: "answer 3"});
实现此目的的最佳方法,使用:
var questionAnswerObject = {};
var answers = [];
answers.push({id:1, answer: 'Alaska'});
answers.push({id:3, answer: 'Rhode Island'});
questionAnswerObject["question"] = 'Which of these states have you lived in?';
questionAnswerObject["answer"] = answers ;
我正在构建问卷,问题可以有多个答案,我需要构建一个问题和答案数组,例如:
{
question: 'question',
answer: {id: 1, answers: 'answer 1'},
{id: 2, answer: 'answer 2'}
}
我需要显示用户选择的问题和答案的摘要。
例如:问题:您住在以下哪个州? 答案:阿拉巴马州、阿拉斯加州、新泽西州、罗得岛州。
生成的对象可能是:
{
question: 'Which of these states have you lived in?',
answer: {id: 1, answer: 'Alaska'},
{id: 3, answer: 'Rhode Island'}
}
如何在问题只显示一次的情况下动态添加答案?
我试过了:
var questionAnswerObject = [];
angular.forEach(answersObject, function(value, key){
questionAnswerObject.push({
question: question.question,
answer: value.answer
});
});
但当然它会显示两次问题。
你遗漏了一些非常重要的东西:你需要 answers
成为一个包含所有答案的数组(或对象)。您不能按照您尝试的方式将多个对象分配给一个值 - 它们需要以某种方式包装。
因此,例如,您的答案对象可能如下所示:
var answerObject = {
question: 'My Question',
answers: [
{id: 1, answer: 'first answer'},
{id: 2, answer: 'second answer'}
]
}
或者,您可以 answers
像这样制作问题 ID 的地图:
var answerObject = {
question: 'My Question',
answers: {
1: 'first answer',
2: 'second answer'
}
}
要在第一个示例中添加答案,只需执行以下操作:
answerObject.answers.push( {id: 3, answer: 'new answer'} );
要在第二个示例中添加答案,只需执行以下操作:
answerObject.answers[3] = 'new answer';
我对你的看法是指你的最终目标是像这个问题和一系列答案
var arrayObjQuestions = [{
question: 'question',
answer: [{id: 1, answers: 'answer 1'},
{id: 2, answer: 'answer 2'}]
},...];
所以如果循环抛出你有的问题并添加答案如下
arrayObjQuestions[0].answer.push({id:1, answer: "answer 1"});
arrayObjQuestions[0].answer.push({id:2, answer: "answer 2"});
arrayObjQuestions[0].answer.push({id:3, answer: "answer 3"});
实现此目的的最佳方法,使用:
var questionAnswerObject = {};
var answers = [];
answers.push({id:1, answer: 'Alaska'});
answers.push({id:3, answer: 'Rhode Island'});
questionAnswerObject["question"] = 'Which of these states have you lived in?';
questionAnswerObject["answer"] = answers ;