Javascript - map 和 callback - 返回值不受影响

6 浏览
0 Comments

Javascript - map 和 callback - 返回值不受影响

我想在数组上使用map方法,并通过回调函数调用另一个函数。一切似乎工作正常,但最后返回的值没有受到影响。我不知道问题出在哪里。

var arr=[4,5,3,2];
function multi (x,callback){
 return callback(x*2); 
}
function add(x){
// alert(x);   当我在这里弹出警告"x"时,它的值被正确地乘以2
return x+3;  
}
var final=arr.map(function(a){multi(a,add); return a;});
final; // 返回与数组"arr"相同的值

0
0 Comments

当我们在使用`map`方法时,传入的回调函数是`multi(a, add)`。在`multi`函数中,它接受一个参数`x`和一个回调函数`callback`,并将`x`乘以2作为参数传递给回调函数。在这种情况下,回调函数是`add`函数。

问题出在我们没有在回调函数中返回值。因此,`map`方法返回的结果数组中的每个元素都是`undefined`,而不是我们期望的`x`加上3的结果。

要解决这个问题,我们需要在回调函数中添加`return`语句,将计算的结果返回。修改后的代码如下:

function multi(x, callback) {
    return callback(x * 2);
}
function add(x) {
    return x + 3;
}
var arr = [4, 5, 3, 2],
    final = arr.map(function (a) { return multi(a, add); });
console.log(final);

输出结果将会是`[11, 13, 9, 7]`,每个元素都是原始数组中的元素乘以2再加上3的结果。

0
0 Comments

问题的出现原因是在函数`add`中,没有使用`return`语句将计算结果返回。

解决方法是在`add`函数中添加`return`语句。

以下是修改后的代码:

var arr = [4, 5, 3, 2];
function multi(x, callback) {
  return callback(x * 2);
}
function add(x) {
  return x + 3;
}
var final = arr.map(function(a) {
  return multi(a, add);
});
console.log(final);

输出结果为:[11, 13, 9, 7]

0
0 Comments

问题出现的原因是回调函数返回的值与传入的值相同,导致结果与输入相同。为了得到预期的输出,应该返回修改后的结果。

解决方法是修改回调函数,将修改后的结果返回。例如:

var final=arr.map(function(a){return multi(a,add);});

另外,如果只想将元素添加到数组中,可以使用var final=arr.map(add);,但是这种情况下不会进行乘以2的操作。

0