【问题标题】:Javascript - How to return from a loop in a callback? [duplicate]Javascript - 如何从回调中的循环返回? [复制]
【发布时间】:2020-03-12 18:15:15
【问题描述】:
const arr = [36,19,69,27];

function push_to_array(data, cb){
  for(let i=0; i < data.length; i++){
      cb(data[i]);
  }
}

let test = push_to_array(arr, function(item){
    console.log(item);
    return item
});
console.log(test)

对于任何缺乏知识,我提前道歉,我正试图围绕回调和高阶函数。

我正在尝试循环我的回调函数并返回数组中的每个值。现在console.log(item) 表明我确实得到了每个值,但返回的结果是我没有定义。我不太清楚为什么,只是想知道我做错了什么。

谢谢。

【问题讨论】:

    标签: javascript arrays loops callback return


    【解决方案1】:

    您的(奇怪的命名)push_to_array 应该使用 cb 的返回值,如果您希望它稍后可见 - 您是否想根据每个项目获得的 returned 创建一个新数组?如果是这样,push_to_array 应该创建一个数组并将每个cb 的结果推送给它:

    function push_to_array(data, cb){
      const newArr = [];
      for(let i=0; i < data.length; i++){
          newArr.push(cb(data[i]));
      }
      return newArr;
    }
    
    let test = push_to_array([36,19,69,27], function(item){
        console.log(item);
        return item
    });
    console.log(test)

    或者,改用.map

    const push_to_array = (data, cb) => data.map(cb);
    
    let test = push_to_array([36,19,69,27], function(item){
        console.log(item);
        return item
    });
    console.log(test)

    假设您要构造一个新数组。如果您希望push_to_array 返回原始 数组,而不是创建一个新数组,那么只需在最后return data,而不是推送到newArr

    【讨论】:

      【解决方案2】:

      push_to_array 是一个 void 函数。意思是,它没有return 任何东西。因此,您会变得不确定。

      我不确定您想要返回什么,但请确保您在 push_to_array 中完成它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-30
        • 2019-11-05
        • 1970-01-01
        • 2017-09-05
        • 2020-12-03
        • 2015-11-17
        • 1970-01-01
        相关资源
        最近更新 更多