Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环之后,数据不是预期的_Javascript_Arrays_Node.js - Fatal编程技术网

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

Javascript 循环之后,数据不是预期的,javascript,arrays,node.js,Javascript,Arrays,Node.js,这里可能遗漏了一些非常明显的东西,但花了很长时间进行测试,无法弄清楚到底发生了什么 我试图遍历数组(dataArray)中的每个项,将其拆分并放入临时数组中。然后遍历这个临时数组,使用另一个数组中的一些列名(columnNames)创建一个临时对象。然后将此临时对象推送到对象(产品)数组中 这很好,我在最后得到的数组包含正确数量的对象,但它们都是相同的对象(最后一个被处理的对象)。当我在console.log中记录每个tempObj时,我可以看到它们是不同的,但由于某些原因,这并没有反映在最终的

这里可能遗漏了一些非常明显的东西,但花了很长时间进行测试,无法弄清楚到底发生了什么

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

这很好,我在最后得到的数组包含正确数量的对象,但它们都是相同的对象(最后一个被处理的对象)。当我在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)
      }
    }
  }
var tempArray=[],
tempObj={};
//如果有数据,则遍历每一行
如果(dataArray!=null | | dataArray!=[]){
试一试{
对于(var i=0;i

注意:以及使用“products[i]=tempObj”将其添加到我尝试过的数组中。没有运气的情况下推。

通过斜视找到了答案:

必须将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)
      }
    }
var tempArray=[];
//如果有数据,则遍历每一行
如果(dataArray!=null | | dataArray!=[]){
试一试{
对于(var i=0;i
您一直在重复使用和更新相同的
tempObj
。为要添加到阵列中的每个对象创建不同的对象。JS从不在赋值时复制复合数据类型(对象和数组)。它只复制对数据的引用。谢谢-trickYou在这个测试
dataArray!=[]
因为
[]=[]
false
,因为它们不是相同的
对象。如果你想检查<代码>数据数组< /C>是空的,然后检查<代码>长度>代码>,你可能想考虑它是否适合<代码>数据阵列< /> >也可以做<代码> var TEMPAROR= DATALARD[i]。code>也是,因为它在外部作用域中并不需要(而且
拆分将使它在该外部作用域中无用)
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)
      }
    }