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

Calling Another Function to Clean An Array

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

这个功能很好用。它清理阵列。

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)
}

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

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]

谢谢

myArray = newArray;

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

它无权更改 arr 保存的数组,该数组是在另一个函数中定义的。

您可以选择两条路:

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

对于选项 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 值也包含在内。

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