调用另一个函数来清理数组

时间:2018-02-14 08:34:33

标签: javascript arrays google-apps-script coding-style

我有一个数组,想要清理它。我有一个函数可以从参数/数组中删除所有空白(或“”)值。但是,当我使用第二个函数调用该函数时,该数组不是 clean 。我哪里错了?

此功能运作良好。它清理阵列。

function cleanArray(myArray) {
  var newArray = [];
  for (var i = 0; i < myArray.length; i++) {
    if (myArray[i]) {
      newArray.push(myArray[i]);
    }
  }
  myArray = newArray;
  Logger.log(myArray)
}

以下函数调用上述函数,并通过上述函数记录 clean 数组。但是,当我尝试记录已经清理过的数组时,它只会记录原始的杂乱数据。

function testCleanArray(){
var arr = [1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,]
  cleanArray(arr);
Logger.log(arr)  
}

这是我运行日志时获得的结果(Google表格脚本编辑器)

[18-02-14 00:23:16:415 PST] [1.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 6.0]
[18-02-14 00:23:16:415 PST] [1.0, 2.0, null, 3.0, null, 3.0, null, null, null, null, null, 4.0, null, 4.0, null, 5.0, null, 6.0, null, null, null]

由于

1 个答案:

答案 0 :(得分:0)

myArray = newArray;

此行将函数myArray上下文中的cleanArray引用更改为新创建的引用。

它没有权力更改arr所拥有的数组,这是在另一个函数中定义的。

您可以采取两种方式:

  1. return新创建的数组,并将其分配给cleanArray之外的变量(我的首选方法)
  2. 更改cleanArray以改变您传递给它的数组,例如使用splicepopshift
  3. 对于选项1,修复将是:

    function cleanArray(myArray) {
      var newArray = [];
    
      /* your for loop here */
    
      return newArray;
    };
    
    
    function testCleanArray(){
      var arr = [1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,]
      arr = cleanArray(arr);
    }
    

    请注意,使用Array.prototype.filter编写清洁功能也更简单。我已检查undefined以确保还包含0值。

    &#13;
    &#13;
    var myArray = [1, 2,, 3,, 3,,,,,, 4,, 4,, 5,, 6,,,,];
    var arr = myArray.filter(x => x !== undefined);
    console.log(arr);
    &#13;
    &#13;
    &#13;