我对谷歌Apps Script Guide的这个例子感到困惑。此函数在给定范围内迭代,并对每个单元格执行计算。
function DOUBLE(input) {
if (input.map) { // Test whether input is an array.
return input.map(DOUBLE); // Recurse over array if so.
} else {
return input * 2;
}
}
我不明白的事情:
input
是什么对象? typeof
告诉我这是一个数字,但它不应该是一个数组吗?毕竟是一系列值(例如A2:B)。 .map
变量之后的input
事物是什么?我在reference page找不到它。它也没有突出显示,因为变量或函数是。return input.map(DOUBLE)
是否意味着"在整个阵列的相应else
语句中执行任何操作"?为什么它的结构如此?非常感谢任何见解(或指向正确来源的指示)。
答案 0 :(得分:5)
此代码是使用内省有条件地执行代码的示例。如果输入是一个数组(并且具有if (input.map)
函数),map
将返回truthy,并且在所有其他情况下将返回falsy。
因此,此代码正在测试输入是否为数组,如果不是,则将其视为数字,否则将其视为数组。
您可以在MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map
上看到地图功能的定义了解JavaScript的最佳书籍是#14; JavaScript是好的部分" http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_1?ie=UTF8&qid=1419857713&sr=8-1&keywords=javascript+the+good+parts