arrays - 为什么最终数组返回最后一个数组的 7 行编译而不是 Google Apps 脚本中的 7 个唯一数组值?
问题描述
抱歉,我对此很陌生,但我做了额外的演员,需要获取我工作的人员和类型的统计信息,并希望构建模板,以便我以后可以参考它来开始计算和显示统计信息。
我的代码:
function myFunction () {
var UNIQUE_ETHNIC = ["w","b","h","a","m","e","o"];
var UNIQUE_GENDER = ["m","f"];
var UNIQUE_AGE = ["20","30","40","50","60","70"];
var egaArray = calculateEga(UNIQUE_ETHNIC, UNIQUE_GENDER, UNIQUE_AGE);
}
function calculateEga(ethnicUnique, genderUnique, ageUnique) {
var returnedArray = [[],[]];
var tempArray = [];
for (eU = 0; eU < ethnicUnique.length; eU++) {
var columnCounter = 0;
for (gU = 0; gU < genderUnique.length; gU++) {
for (aU = 0; aU < ageUnique.length; aU++) {
tempArray[columnCounter] = ethnicUnique[eU]+genderUnique[gU]+ageUnique[aU];
columnCounter++; //used so male & female on one line
}
}
Logger.log(tempArray); //this gives the right array here each time
returnedArray[eU] = tempArray;
//returnedArray[eU] = ['ega: '+tempArray]; //outputs what I kind of need
}
Logger.log(returnedArray); // 7 dupes of the last compiled array
return returnedArray;
}
--- 第一个 Logger.log 吐出正确的 tempArray 值,但是一旦我将它们粘贴到返回的数组中,它只会给我最后一个编译数组的 7 个重复值,因此最后一个 Logger.log 给出了这个:
[[om20,om30,om40,om50,om60,om70,of20,of30,of40,of50,of60,of70],
[om20、om30、om40、om50、om60、om70、of20、of30、of40、of50、of60、of70],
[om20、om30、om40、om50、om60、om70、of20、of30、of40、of50、of60、of70],
[om20、om30、om40、om50、om60、om70、of20、of30、of40、of50、of60、of70],
[om20、om30、om40、om50、om60、om70、of20、of30、of40、of50、of60、of70],
[om20、om30、om40、om50、om60、om70、of20、of30、of40、of50、of60、of70],
[om20,om30,om40,om50,om60,om70,of20,of30,of40,of50,of60,of70]]
但是,如果我使用注释掉的'ega:'调用,我会更接近我的目标版本:
[例如:wm20,wm30,wm40,wm50,wm60,wm70,wf20,wf30,wf40,wf50,wf60,wf70],
[例如:bm20,bm30,bm40,bm50,bm60,bm70,bf20,bf30,bf40,bf50,bf60,bf70],
[例如:hm20,hm30,hm40,hm50,hm60,hm70,hf20,hf30,hf40,hf50,hf60,hf70],
[例如:am20,am30,am40,am50,am60,am70,af20,af30,af40,af50,af60,af70],
[例如:mm20,mm30,mm40,mm50,mm60,mm70,mf20,mf30,mf40,mf50,mf60,mf70],
[例如:em20,em30,em40,em50,em60,em70,ef20,ef30,ef40,ef50,ef60,ef70],
[例如:om20,om30,om40,om50,om60,om70,of20,of30,of40,of50,of60,of70]]
想要获得更高版本,但没有'ega:'
感谢您在这里的任何帮助!
解决方案
我认为在您的情况下,tempArray
可能会将值returnedArray
作为引用传递放入数组中。从您的样本值来看,所有值似乎都是tempArray
. 通过这种方式,当'ega: '+tempArray
使用时,将运行按值传递并获得预期的数组。我认为这可能是您的问题的原因。在这种情况下,如何进行以下修改?
从:
returnedArray[eU] = tempArray;
至:
returnedArray[eU] = tempArray.slice();
或者
returnedArray[eU] = tempArray.concat();
或者
returnedArray[eU] = [...tempArray];
- 在这种情况下,我认为其他方法也存在。
测试:
function myFunction() {
var UNIQUE_ETHNIC = ["w", "b", "h", "a", "m", "e", "o"];
var UNIQUE_GENDER = ["m", "f"];
var UNIQUE_AGE = ["20", "30", "40", "50", "60", "70"];
var egaArray = calculateEga(UNIQUE_ETHNIC, UNIQUE_GENDER, UNIQUE_AGE);
console.log(egaArray)
}
function calculateEga(ethnicUnique, genderUnique, ageUnique) {
var returnedArray = [[], []];
var tempArray = [];
for (eU = 0; eU < ethnicUnique.length; eU++) {
var columnCounter = 0;
for (gU = 0; gU < genderUnique.length; gU++) {
for (aU = 0; aU < ageUnique.length; aU++) {
tempArray[columnCounter] = ethnicUnique[eU] + genderUnique[gU] + ageUnique[aU];
columnCounter++;
}
}
returnedArray[eU] = tempArray.slice();
}
return returnedArray;
}
myFunction();
参考:
推荐阅读
- laravel - 已解决:我对 BackPack 中的可重复 -> select2_from_array 字段有疑问
- powershell - 从特定目录获取文件并将它们放在具有新文件名的平面结构中
- javascript - JavaScript 函数返回两次但只被调用一次
- javascript - 当我拆分它并使用它时输入类型时间处理更改反应分钟来分隔数字
- r - 有没有办法通过输入文件并行运行 R 脚本?
- python - 如何迭代多个级别和值数组的字典
- javascript - Apache Charts 甜甜圈样式/功能
- javascript - 在铬中执行 WritableStream.close() 时“在后台工作”光标
- javascript - 如何在 React 中操作 swiper.js 的幻灯片数组?
- react-native - 如何使用钩子useEffect处理功能组件中的addListener事件?