我可以在EE(Google地球引擎Javascript API)中
var listOfNumbers = [0, 1, 1, 2, 3, 5];
print('List of numbers:', listOfNumbers);
var add_ten = function(n) {
var m = n + 10;
return m;
}
var listOfNumbers_ = listOfNumbers.map(add_ten);
print('List of numbers:', listOfNumbers_);
如果我想添加x
(或另一个值)而不是10怎么办?喜欢
var listOfNumbers = [0, 1, 1, 2, 3, 5];
print('List of numbers:', listOfNumbers);
var add_x = function(n, x) {
var m = n + x;
return m;
}
var listOfNumbers_ = listOfNumbers.map(add_x);
print('List of numbers:', listOfNumbers_);
如何通过x
?
我尝试过
var listOfNumbers_ = listOfNumbers.map(add_x(100));
print('List of numbers:', listOfNumbers_);
但是得到了NaN is not a function.
也尝试过
var listOfNumbers_ = listOfNumbers.map(add_x, 100);
print('List of numbers:', listOfNumbers_);
然后得到了以下有趣的结果(我不明白)
0,2,3,5,7,10
答案 0 :(得分:2)
这是使用currying的方法:
var listOfNumbers = [0, 1, 1, 2, 3, 5];
console.log('List of numbers:', listOfNumbers);
var add_x = (n) => (x) => {
return n + x;
}
var listOfNumbers_ = listOfNumbers.map(add_x(100));
console.log('List of numbers:', listOfNumbers_);
请注意,将add_x
变量设置为以第二个值作为参数调用的函数。
与.map()
方法一起使用时,第一个值来自数组,第二个值作为函数的参数提供。相当于这样调用它:
add_x(1)(100)
答案 1 :(得分:2)
如果您不想更改当前函数,则可以通过partial application使用Function#bind
来为其提供一个参数,而不能提供另一个参数:
var listOfNumbers = [0, 1, 1, 2, 3, 5];
var add_x = function(n, x) {
var m = n + x;
return m;
}
var add_10 = add_x.bind(null, 10);
var listOfNumbers_ = listOfNumbers.map(add_10);
console.log(listOfNumbers_);
甚至:
var listOfNumbers_ = listOfNumbers.map(add_x.bind(null, 10));
或者,您可以使用currying:
var listOfNumbers = [0, 1, 1, 2, 3, 5];
var add_x = function(n) {
return function (x){
var m = n + x;
return m;
}
}
var add_10 = add_x(10);
var listOfNumbers_ = listOfNumbers.map(add_10);
console.log(listOfNumbers_);
甚至:
var listOfNumbers_ = listOfNumbers.map(add_x(10));
您可以使用箭头功能来缩短咖喱的定义:
var add_x = n => x => n+x;
答案 2 :(得分:1)
您可以简单地编写一个新函数并将其传递给.map()
方法:
function mapFn(value) { return add_x(value, 100) }
listOfNumbers.map(mapFn)
您可以使用arrow function syntax使其更简单:
listOfNumbers.map(value => add_x(value, 100))
答案 3 :(得分:1)
当您查看Array#map
的函数签名时,数组总和是非常有意义的,因为提供给回调函数的前两个参数是元素和迭代的索引。
您至少有两个选择:
Function#bind
,为初始参数n
加上前缀,并使x
为数组中的元素,例如
const arr = [0, 1, 1, 2, 3, 5];
const r1 = arr.map(add_x.bind(null, n));
const r2 = arr.map(x => add_x(n, x));