回调和操作数组但返回 undefined
Callbacks & manipulating arrays but getting undefined back
练习回调和高阶函数&在网上找到这个问题。
var merge = function(array1, array2, callback){
//your code here.
}
var x = merge([1, 2, 3, 4], [5, 6, 7, 8], function(a, b){
return a + b;
});
//x should now equal [6, 8, 10, 12].
这是我对这个问题的看法。
var merge = function(array1, array2, callback){
for(var i = 0; i < array1.length; i++) {
callback(array1[i], array2[i]);
}
}
var x = merge([1, 2, 3, 4], [5, 6, 7, 8], function(a, b){
return a + b;
});
当我 console.log(x) 时,控制台 returns "undefined" 所以我猜它必须做 w/ x 的值不是数组。我可以看到数学计算是正确的,因为当我将 "return a + b" 更改为 "console.log(a + b)" 时,我得到了正确的数字,但不是数组形式。谁能指出我正确的方向?
您正在调用 callback
,但您忽略了由它编辑的值 return。您应该将所有值累积到一个数组中,并且您应该 return 来自 merge
.
的数组
例如,
function merge(array1, array2, callback) {
// Define an array object to accumulate the results from `callback`
var result = [];
for (var i = 0; i < array1.length; i++) {
// Accumulate the result of `callback` in `result` array
result.push(callback(array1[i], array2[i]));
}
// Return the `result` array
return result;
}
注意:如果数组大小不同,那么运行基于array1
长度的循环将不会总是正确的。所以,您可能想要
取两个数组中长度最小的,忽略较长数组中的元素
或为较短数组的元素使用默认值。
如果选择第一种方法,那么只需要调整循环条件,像这样
var minLen = Math.min(array1.length, array2.length);
for (var i = 0; i < minLen; i++) {
...
如果你选择第二种方法,那么你需要运行直到两个数组的最大值并使用默认值,就像这样
var maxLen = Math.max(array1.length, array2.length);
for (var i = 0; i < maxLen; i++) {
result.push(callback(array1[i] || 0, array2[i] || 0));
}
这里如果array1[i]
的值returns undefined
(如果在数组中没有找到索引,undefined
会是return ed),意思是array1
比array2
短,所以会使用默认值0
。
练习回调和高阶函数&在网上找到这个问题。
var merge = function(array1, array2, callback){
//your code here.
}
var x = merge([1, 2, 3, 4], [5, 6, 7, 8], function(a, b){
return a + b;
});
//x should now equal [6, 8, 10, 12].
这是我对这个问题的看法。
var merge = function(array1, array2, callback){
for(var i = 0; i < array1.length; i++) {
callback(array1[i], array2[i]);
}
}
var x = merge([1, 2, 3, 4], [5, 6, 7, 8], function(a, b){
return a + b;
});
当我 console.log(x) 时,控制台 returns "undefined" 所以我猜它必须做 w/ x 的值不是数组。我可以看到数学计算是正确的,因为当我将 "return a + b" 更改为 "console.log(a + b)" 时,我得到了正确的数字,但不是数组形式。谁能指出我正确的方向?
您正在调用 callback
,但您忽略了由它编辑的值 return。您应该将所有值累积到一个数组中,并且您应该 return 来自 merge
.
例如,
function merge(array1, array2, callback) {
// Define an array object to accumulate the results from `callback`
var result = [];
for (var i = 0; i < array1.length; i++) {
// Accumulate the result of `callback` in `result` array
result.push(callback(array1[i], array2[i]));
}
// Return the `result` array
return result;
}
注意:如果数组大小不同,那么运行基于array1
长度的循环将不会总是正确的。所以,您可能想要
取两个数组中长度最小的,忽略较长数组中的元素
或为较短数组的元素使用默认值。
如果选择第一种方法,那么只需要调整循环条件,像这样
var minLen = Math.min(array1.length, array2.length);
for (var i = 0; i < minLen; i++) {
...
如果你选择第二种方法,那么你需要运行直到两个数组的最大值并使用默认值,就像这样
var maxLen = Math.max(array1.length, array2.length);
for (var i = 0; i < maxLen; i++) {
result.push(callback(array1[i] || 0, array2[i] || 0));
}
这里如果array1[i]
的值returns undefined
(如果在数组中没有找到索引,undefined
会是return ed),意思是array1
比array2
短,所以会使用默认值0
。