javascript - 将对象插入数组会更改数组 Javascript 中的现有元素

标签 javascript jquery arrays

我正在尝试构建一个小型测验应用程序,作为其中的一部分,我创建了一个问题生成器。我正在尝试的是将所有选项推送到问题数组中,以将相应的选项保存到每个问题中。

这是我正在尝试的代码

        var Question = { Questionid: 0, QuestionText: '', SectionId: 0, QuestionTime: 0, QuestionScore: 0, Mandatory: 0,Option:[] }
        var Option = { OptionId: 0, QuestionId: 0, OptionText: '', RightAnswer: '' };
        Question.Mandatory = $('#cb_mandatory').prop('checked') * -1;
        Question.Questionid = typeof ($('#div_question').data('QuestionId')) == 'undefined' ? 0 : $('#div_question').data('QuestionId');
        Question.QuestionScore = $('#txt_question_score').val();
        Question.QuestionText = $('#txt_question').val();
        Question.QuestionTime = $('#txt_question_time').val();
        Question.SectionId = $('#dd_section').val();
        //
        $('.my-options').each(function (index, item) {
            Option.OptionId = typeof ($(item).data('OptionId')) == 'undefined' ? 0 : $(item).data('OptionId');
            Option.OptionText = $(item).find('input:text').val();
            Option.QuestionId = typeof ($('#div_question').data('QuestionId')) == 'undefined' ? 0 : $('#div_question').data('QuestionId');
            Option.RightAnswer = +$(item).find(':radio').is(':checked');

            Question.Option.push(Option);
        });

        alert(JSON.stringify(Question));

在这里,当我检查最终警报时,所有数组元素都与最后一个元素相同。但是当我在每个选项的循环中放置一个警报时,它看起来有所不同。

所以我猜想当改变循环内的选项对象时,那些已经插入数组的对象也会改变。

那么我该如何解决这个问题呢?我的意思是我需要避免更改那些已经插入数组的内容。

最佳答案

JavaScript 中的对象是基于引用的。这意味着您每次插入数组的并不是一个新的 Option 对象,而是对同一个 Option 对象的引用。当您在每个循环中更改对象时 - 您插入的所有对象也会“更改” - 实际上它们没有,它们只是指向更改的对象。

您应该做的是将 var Option 减速移动到循环中,从而在每次迭代中创建(并推送)一个新的选项对象。

关于javascript - 将对象插入数组会更改数组 Javascript 中的现有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59388666/

相关文章:

javascript - 遍历 jsPlumb 中 div 的端点

javascript - 使用 for 循环递归地循环对象数组

java - 从 PlayFramework 表单发布 JSON 数据

javascript - 使用 jQuery 清除表单历史记录

javascript - AngularJS ng-class 删除类

jquery - 列表在不直接使用的情况下被过滤

jQuery 性能 : hide() vs is (':visible' ) - which is faster?

arrays - 将字符串转换为字典数组中的 NSDate

java - 在 if 条件中声明数组的解决方法

php - 如何从数组中去除只有空白的元素?