返回的数组应该为[1,2,3]
,但是[3,4,5]
被记录到控制台。有人可以向我解释为什么吗?
function forEach(array, callback) {
var newA = []
for (var i = 0; i < array.length; i++) {
newA.push(callback(array[i]));
}
}
function map(array, callback) {
forEach(array, callback)
return array
}
console.log(map([3, 4, 5], n => n - 2));
答案 0 :(得分:1)
回调函数未执行
是的,您只需要正确返回新数组
堆栈片段
function forEach(array, callback) {
var newA = [];
for (var i = 0; i < array.length; i++) {
newA.push(callback(array[i]));
}
return newA; // added
}
function map(array, callback) {
return forEach(array, callback); // changed
}
console.log(map([3, 4, 5], n => n - 2));
或深克隆array
并清除它,就像这样
function forEach(array, callback) {
var newA = JSON.parse(JSON.stringify(array)); // deep clone
array.length = 0; // clear the array
for (var i = 0; i < newA.length; i++) {
array.push(callback(newA[i]));
}
}
function map(array, callback) {
forEach(array, callback);
return array
}
console.log(map([3, 4, 5], n => n - 2));
或这个
function forEach(array, callback) {
var newA = array.slice(); // shallow copy
array.length = 0; // clear the array
for (var i = 0; i < newA.length; i++) {
array.push(callback(newA[i]));
}
}
function map(array, callback) {
forEach(array, callback);
return array
}
console.log(map([3, 4, 5], n => n - 2));
答案 1 :(得分:1)
您的map()
函数要求forEach()
在适当的位置修改数组,而不是创建新的数组。所以应该是:
function forEach(array, callback) {
for (var i = 0; i < array.length; i++) {
array[i] = callback(array[i]);
}
}
function map(array, callback) {
forEach(array, callback);
return array;
}
console.log(map([3, 4, 5], n => n - 2));
如果不应该修改map()
的参数,则可以在调用forEach()
之前复制数组。
function forEach(array, callback) {
for (var i = 0; i < array.length; i++) {
array[i] = callback(array[i]);
}
}
function map(array, callback) {
array = array.slice();
forEach(array, callback);
return array;
}
var testArray = [3, 4, 5];
console.log(map(testArray, n => n - 2));
console.log(testArray);