我需要在每个对象内放置一个数组,然后迭代这个最近添加的数组,以将对象的属性放置在对象内数组上的每个实例内。
像这样:
var answer = [];//with three objects in here
var alternatives = [{id_alternative : 40},{id_alternative : 47},{id_alternative : 56}]
$.each(alternatives, function(index, item){
item.answers = answer;
$.each(item.answers, function(i, ans){
ans.alternative = item.id_alternative;
}
}
但在结果中我总是得到alternatives[anyindex].answers[anyindex].alternative总是56。我不知道到底发生了什么。
希望得到一些帮助,谢谢!
编辑
“内部三个对象”是指内部包含其他类型数据的对象数组,数组“answer”内的每个对象将包含 Question_name 字符串和 real_answer 整数。
我最终需要的是:
alternatives = [
{id_alternatives:40,
answers:[{
alternative:40,
question_name: "string",
real_answer:489},
{
alternative:40,
question_name: "string",
real_answer:548},
{
alternative:40,
question_name: "string",
real_answer:40}
]},//with several other objects with this structure, but other data
最佳答案
您仅创建一个数组(第一行中的 []
),然后共享其引用并在整个代码中修改它。如果您想要不同的数组,则必须单独创建它们。例如,您可以替换
item.answers = answer;
与
item.answers = answer.slice(0);
这是用于数组克隆的 JavaScript 习惯用法,用于制作数组的副本。如果您要修改其中的元素(正如您所看到的那样;您的示例不完整),这是不够的,因为它将克隆对元素的引用,而不是元素本身,并且您将需要深层复制。使用新对象构造一个新数组可能更容易,而不是在那一行。
关于javascript - $.each 内的 $.each 返回最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29981605/