【问题标题】:JavaScript for loop adding objects to objectsJavaScript for循环将对象添加到对象
【发布时间】:2018-05-19 21:07:53
【问题描述】:

我有一个格式如下的数组(数据):

["1", "open_order", "form", "county", "San Diego", "title_officer", "Peter", "0"]
["2", "open_order", "form", "county", "San Diego", "branch", "MV", "0"]

当我通过 for 循环并将其添加到 dataObject 时,console.log(dataObject) 为我提供了所有条目(这就是我想要的!) 但是,console.log(o) 显示最后一个条目将进入两个记录的 o 对象。

$(function() {
  var o = {};
  var dataObject = {};
  var i = 0;
  var predata = $('#preferences').text();
  var data = JSON.parse(predata);
    for(i = 0; i < data.length; i++) {
      dataObject['preferenceId'] = data[i][0];
      dataObject['pageName'] = data[i][1];
      dataObject['preferenceType'] = data[i][2];
      dataObject['baseField'] = data[i][3];
      dataObject['baseValue'] = data[i][4];
      dataObject['targetField'] = data[i][5];
      dataObject['targetValue'] = data[i][6];
      dataObject['conditionalId'] = data[i][7];
        o[i] = dataObject;
        console.log(dataObject);
    }
  console.log(o);
});
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

任何想法为什么 dataObject 对于添加到 o 对象的所有对象都是相同的?

【问题讨论】:

    标签: javascript jquery loops object for-loop


    【解决方案1】:

    您应该在循环内初始化dataObject 以创建一个新变量。

    for(i = 0; i < data.length; i++) {
        var dataObject = {}; /* Init the variable here */
        dataObject['preferenceId'] = data[i][0];
        dataObject['pageName'] = data[i][1];
        dataObject['preferenceType'] = data[i][2];
        dataObject['baseField'] = data[i][3];
        dataObject['baseValue'] = data[i][4];
        dataObject['targetField'] = data[i][5];
        dataObject['targetValue'] = data[i][6];
        dataObject['conditionalId'] = data[i][7];
        o[i] = dataObject;
        onsole.log(dataObject);
    }
    

    这将导致:

    0: {
        baseField: "county",
        baseValue: "San Diego",
        conditionalId: "0",
        pageName: "open_order",
        preferenceId: "1",
        preferenceType: "form",
        targetField: "title_officer",
        targetValue: "Peter"
    }
        1: {
        baseField: "county",
        baseValue: "San Diego",
        conditionalId: "0",
        pageName: "open_order",
        preferenceId: "2",
        preferenceType: "form",
        targetField: "branch",
        targetValue: "MV",
    }
    

    最终数组上的所有值都相同的原因是,您只是通过引用分配dataObject,而不是创建新变量。

    【讨论】:

    • 乐于助人 ;)
    猜你喜欢
    • 2016-04-20
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多