我有一个数组,想要清理它。我有一个函数可以从参数/数组中删除所有空白(或“”)值。但是,当我使用第二个函数调用该函数时,该数组不是 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]
由于
答案 0 :(得分:0)
myArray = newArray;
此行将函数myArray
上下文中的cleanArray
引用更改为新创建的引用。
它没有权力更改arr
所拥有的数组,这是在另一个函数中定义的。
您可以采取两种方式:
return
新创建的数组,并将其分配给cleanArray
之外的变量(我的首选方法)cleanArray
以改变您传递给它的数组,例如使用splice
,pop
和shift
。对于选项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);
&#13;