【问题标题】:Flatten an array with forEach使用 forEach 展平数组
【发布时间】:2018-04-01 07:09:20
【问题描述】:

在查看了this post 的扁平化数组后,我注意到没有人使用过数组方法forEach。我试了一下,失败了,只收到一个空数组:

let arrays = [[1, 2, 3], [4, 5], [6]];
let result = [];

arrays.forEach( (element) => {
    result.concat(element)
})

console.log(result) //[]

我哪里做错了?

【问题讨论】:

    标签: javascript arrays foreach concat


    【解决方案1】:

    你必须result = result.concat(element)

    concat() 方法用于合并两个或多个数组。这种方法 不会改变现有数组,而是返回一个新数组。

    let arrays = [[1, 2, 3], [4, 5], [6]];
    let result = [];
    
    arrays.forEach((element) => {
      result = result.concat(element)
    })
    
    console.log(result) //[]

    文档:concat

    【讨论】:

      【解决方案2】:

      .concat() 总是返回一个新数组。它不会修改它正在操作的数组。

      您假设.concat() 将在完成其操作后将结果保存在其操作数中。然而事实并非如此。您需要在.concat() 之后明确保存结果:

      result = result.concat(element);
      

      演示:

      let arrays = [[1, 2, 3], [4, 5], [6]];
      let result = [];
      
      arrays.forEach((element) => {
        result = result.concat(element)
      });
      
      console.log(result);

      您也可以使用spread syntax 代替.forEach() 来展平数组。

      let result = [].concat(...arrays);
      

      演示:

      let arrays = [[1, 2, 3], [4, 5], [6]];
      let result = [].concat(...arrays);
      
      console.log(result);

      【讨论】:

        【解决方案3】:

        concat 返回一个新数组,因此您需要将其分配给结果,例如result = result.concat(element)

        let arrays = [[1, 2, 3], [4, 5], [6]];
        let result = [];
        
        arrays.forEach( (element) => {
            result = result.concat(element)
        })
        
        console.log(result) 

        【讨论】:

          猜你喜欢
          • 2017-12-26
          • 1970-01-01
          • 1970-01-01
          • 2019-04-16
          • 1970-01-01
          • 2019-06-30
          • 1970-01-01
          • 2016-02-05
          • 2020-11-21
          相关资源
          最近更新 更多