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

Javascript 通过使用array.push方法,可以添加元素,但它';它也覆盖了最后一个对象,javascript,jquery,arrays,Javascript,Jquery,Arrays,我在这里遇到一个奇怪的问题,每次我将obj推到数组时,数组长度都会如预期的那样增加,但我最后推的对象会覆盖所有其他对象,我无法识别我的错误,因此请帮助我。提前感谢,请检查以下代码 var tablehead = {}; var experimentsData = []; var obj = {}; var remoteSheet = response.result.values; remoteSheet.filter(function(innerArrayItem) { if (

我在这里遇到一个奇怪的问题,每次我将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);
    }
});

因为你每次都在推同一个物体
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);
    }
});
var-experimentsData=[];

//var obj={};什么是
tablehead
,在哪里定义了
i
remoteSheet
值的示例在这里也会有很大帮助。您的'filter(),'handler函数中也没有返回任何内容,因此它是非常冗余的。您使用的是
Array#filter
for…?只是为了过滤“remoteSheet”数据,然后返回一些内容。。如果您只想迭代它,请改用
Array 35; forEach
。因为您使用相同的对象,并且它在每个索引中都有相同的引用……现在每个人都使用
Array#filter
来迭代数组。。这太疯狂了。@ganeshstate您应该接受答案,然后单击upvote控件旁边的复选框。