简体   繁体   English

用于循环向对象添加对象的JavaScript

[英]JavaScript for loop adding objects to objects

I have an array (data) formatted like so: 我有一个格式如下的数组(数据):

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

When I put this through a for loop and add it to the dataObject, console.log(dataObject) gives me all of the entries (this is what I want!) However, console.log(o) shows that the last entry is going into the o object for both records. 当我将其放入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); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

Any ideas why dataObject would be the same for all objects added to the o object? 有什么想法为什么dataObject对于添加到o对象的所有对象都是相同的?

You should init the dataObject inside the loop to make a new variable. 您应该在循环内初始化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);
}

This will result to: 这将导致:

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",
}

The reason why all of the values on the final array is the same is that, you are just assigning the dataObject by reference and you are not making a new variable. 最终数组上的所有值都相同的原因是,您只是通过引用分配dataObject ,而没有创建新变量。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM