循环之后,数据不是预期的

时间:2015-07-06 22:02:16

标签: javascript arrays node.js

可能在这里遗漏了一些非常明显的东西,但花了很多时间测试它并且无法弄清楚发生了什么。

我正在尝试遍历数组中的每个项目(dataArray),将其拆分并将其放入临时数组中。然后浏览这个临时数组,并使用我在另一个数组(columnNames)中的一些列名创建一个临时对象。然后将此临时对象推送到对象(产品)数组中。

e.g.   
col names ['A', 'B', 'C']  
temparray ['a', 'a', 'a']  
into ==>
products [{'A':'a','B':'b','C':'c'}]

这没关系,我在最后得到的数组包含正确数量的对象,但它们都是相同的对象(最后一个被处理的对象)。当我在console.log中每个tempObj时,我可以看到它们是不同的,但由于某种原因,这并没有反映在最终的数组中。

有什么想法吗?

    var tempArray = [],
    tempObj = {};
    //run through each row if there is data
    if (dataArray != null || dataArray != []) {
      try {
        for (var i = 0; i < dataArray.length; i++) {
          //split row by ','
          tempArray = dataArray[i].split(',');

          for (var y = 0; y < tempArray.length; y++) {

            tempObj[columnNames[y]] = tempArray[y];
            //onsole.log(tempObj[columnNames[y]]);
          }
          console.log(tempObj);
          products[i] = tempObj;
        }
      } catch (e) {
        console.error(e);
      } finally {
        console.log(products);
        console.log("Seperated into " + products.length + " products...");
        ProductUpdater(products, merchantID)
      }
    }
  }

注意:以及使用“products [i] = tempObj”将它添加到我尝试过的数组.push没有运气。

1 个答案:

答案 0 :(得分:0)

感谢斜视找到答案:

必须将tempObj的声明移动到第一个for循环中。

var tempArray = [];

    //run through each row if there is data
    if (dataArray != null || dataArray != []) {
      try {
        for (var i = 0; i < dataArray.length; i++) {
          var tempObj = {};
          //split row by ','
          tempArray = dataArray[i].split(',');

          for (var y = 0; y < tempArray.length; y++) {

            tempObj[columnNames[y]] = tempArray[y];
            //onsole.log(tempObj[columnNames[y]]);
          }
          //console.log(tempObj.ean);
          products[i] = tempObj;
        }
      } catch (e) {
        console.error(e);
      } finally {
        console.log(products);
        console.log("Seperated into " + products.length + " products...");
        ProductUpdater(products, merchantID)
      }
    }