首页 > 解决方案 > 将对象推入循环内的数组中

问题描述

几个小时以来,我一直在尝试破解这个,但我似乎真的无法成功。我正在尝试创建一个如下所示的 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());

标签: javascriptjson

解决方案


您只是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;
};

推荐阅读