回调函数未执行

时间:2018-07-02 20:17:48

标签: javascript function callback

返回的数组应该为[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));

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);