Javascript 将数组中的对象推送到循环中

Javascript 将数组中的对象推送到循环中,javascript,json,Javascript,Json,几个小时以来,我一直试图破解这个问题,但我似乎真的无法成功。我试图创建一个JSON字符串,如下所示,但是当将变量obj的值传递给变量j时,我只得到该循环的最后一个结果的数组 而不是得到如下结果: [{machine: "hi"...} {machine: "2"....}] 我得到: [{machine: "2"...} {machine: "2".... and keep going with same value}] 我做错了什么 var return_json = functio

几个小时以来,我一直试图破解这个问题,但我似乎真的无法成功。我试图创建一个JSON字符串,如下所示,但是当将变量
obj
的值传递给变量
j
时,我只得到该循环的最后一个结果的数组

而不是得到如下结果:

[{machine: "hi"...}
 {machine: "2"....}]
我得到:

[{machine: "2"...}
 {machine: "2"....
 and keep going with same value}]
我做错了什么

var return_json = function(){
    var j = [];
    var obj = {};
    var td;
    for(var i=1;i<tr.length;i++){
        td = tr[i].getElementsByTagName("td");
        obj['machine'] = td[0].innerHTML;
        console.log(obj['machine']);
        obj['day'] = td[1].getElementsByTagName("p")[0].innerHTML;
        obj['night'] = td[2].getElementsByTagName("p")[0].innerHTML;
        j.push(obj);
        console.log(j);
    }
    return j;
};

console.log(save_limitation());
var return\u json=function(){
var j=[];
var obj={};
var-td;

对于(var i=1;i您只在循环之前的
obj
变量中创建一个对象实例。在每次迭代中,您都会更新对象的属性,并将同一对象推送到数组中

要修复它,请在每次迭代时在循环中创建一个新对象

var return_json = function() {
    var j = [];
    var td;
    for(var i = 1; i < tr.length; i++){
        td = tr[i].getElementsByTagName("td");
        j.push({
            machine: td[0].innerHTML,
            day: td[1].getElementsByTagName("p")[0].innerHTML,
            night: td[2].getElementsByTagName("p")[0].innerHTML
        });
    }
    return j;
};
var return\u json=function(){
var j=[];
var-td;
对于(变量i=1;i
因为
obj
是在循环外部定义的,所以您在每个循环中将相同的对象添加到数组中。您在每次迭代中都会更新
obj
的属性。 在循环内部定义
obj
,以确保您没有这样做

var tr=document.getElementById(“myTable”).getElementsByTagName(“tr”);
var return_json=function(){
var j=[];

对于(var i=1;i尝试初始化每个元素的循环内的td和obj:

var return_json = function(){
        var j = [];
        for(var i=1;i<tr.length;i++){
        var obj = {};
        var td;
            td = tr[i].getElementsByTagName("td");
            obj['machine'] = td[0].innerHTML;
            console.log(obj['machine']);
            obj['day'] = td[1].getElementsByTagName("p")[0].innerHTML;
            obj['night'] = td[2].getElementsByTagName("p")[0].innerHTML;
            j.push(obj);
            console.log(j);
        }
        return j;
    };

    console.log(save_limitation());
var return\u json=function(){
var j=[];

对于(var i=1;i
obj.machine
是对
td
的引用。一旦分配了
td
,您需要删除指向它的链接。这应该可以解决问题

for(var i=1;i<tr.length;i++){
    td = {};
    td = tr[i].getElementsByTagName("td");
    obj['machine'] = JSON.parse(JSON.stringify(td));
    console.log(obj['machine']);
    obj['day'] = td[1].getElementsByTagName("p")[0].innerHTML;
    obj['night'] = td[2].getElementsByTagName("p")[0].innerHTML;
    j.push(obj);
    console.log(j);
}

for(var i=1;i你是在尝试创建JSON字符串还是在JSON对象上迭代?@Alex我希望我能回答这个问题,但我不知道我在做什么。这就是我所知道的。如果你想创建一个
JSON
字符串,你可以使用
JSON.stringify()
并向其中传递一个数组。Define
var obj={}
内的
用于
loop@Satpal天哪,我花了这么多时间试图解决这个问题,而我所要做的就是在循环中使用degine var obj。谢谢