JavaScript for 循环添加对象到对象

标签 javascript jquery loops object for-loop

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

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

当我将其通过 for 循环并将其添加到数据对象时,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);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

知道为什么 dataObject 对于添加到 o 对象的所有对象都是相同的吗?

最佳答案

您应该在循环内初始化 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 而不是创建新变量。

关于JavaScript for 循环添加对象到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47666601/

相关文章:

javascript - 数据集对象和数据属性背后的想法是什么?

javascript - 调用jQuery插件函数时,第一次调用成功,再次运行,调用失败

javascript - 双动画路径绘制错误,使用 Raphael.js

python - For循环不是 "refreshing"Python

java:字符串索引超出范围:6

php - 从 ajax 响应中提取数据

javascript - 显示当前选项卡 javascript

php - 在循环内使用 JQuery 展开和折叠段落

jquery - 使用jquery取消选中复选框时隐藏文本

loops - 比较列表中的所有元素并获取匹配对的可变引用