通过使用array.push方法添加了元素,但它也覆盖了最后一个对象

时间:2016-12-30 13:46:36

标签: javascript jquery arrays

每次我将obj推向数组时,我都面临着一个奇怪的问题。数据长度正在按预期增加但是我最后推送的对象覆盖了所有其他对象,我无法识别我的错误所以请帮帮我。在此先感谢请检查以下代码。

var tablehead = {};   
var experimentsData = [];
var obj = {};
var remoteSheet = response.result.values;

remoteSheet.filter(function(innerArrayItem) {
    if (i == 0) {
        tablehead = innerArrayItem;
        i++;
    } else {    
        $.each(tablehead, function(key, value) {
            obj[value] = innerArrayItem[key];
        });
        experimentsData.push(obj);
    }
});

1 个答案:

答案 0 :(得分:2)

因为您每次都在推送相同的对象。 obj仅创建一次,并且在每次迭代时覆盖您在上一次迭代中放入的数据。

var experimentsData = [];
// var obj = {};  <-- don't define obj here
var remoteSheet = response.result.values;

remoteSheet.filter(function(innerArrayItem) {
    if (i == 0) {
        tablehead = innerArrayItem;
        i++;
    } else {  
        var obj = {} // <-- define it here  
        $.each(tablehead, function(key, value) {
            obj[value] = innerArrayItem[key];
        });
        experimentsData.push(obj);
    }
});

另外,filter是一种迭代数组的坏方法,我建议切换到基本的for循环。

相关问题