访问 Array.map() 中的上一个父值

我正在尝试创建一个函数,使用 Array.map() 函数在 javascript 中创建帕斯卡三角形。


实际上,我正在使用这个功能:


let triangle = [],

    maxRows = 5

    

// Columns

for (let i = 0; i < maxRows; i++) {

  // Create new row

  let row = [];


  // Fill row

  for (let j = 0; j <= i; j++) {

    row.push(j === 0 || j === i ? 1 : triangle[i - 1][j - 1] + triangle[i - 1][j]);

  }


  // Add row to triangle

  triangle.push(row);

}


console.log(triangle)

但我想使用这样的东西:


let triangle = Array(maxRows).fill().map((row, i) => {

  return Array(i + 1).fill().map((_, j) => {

    return j === 0 || j === i ? 1 : triangle[i - 1][j - 1] + triangle[i - 1][j];

  });

});

有没有办法访问第二个 Array.map() 内的三角形变量?


海绵宝宝撒
浏览 91回答 1
1回答

忽然笑

由于Array.prototype.map()不会实时就地改变源数组,而是在循环遍历源数组后返回新数组triangle,因此实际上没有访问的意义- 它仍然是一个包含 5 个项目的稀缺数组:(由)[,,,,]返回Array().fill(),直到.map()循环结束。为了解决这个问题,您可以想出递归方法,或者使用Array.prototype.reduce():const maxRows = 5,      triangle = Array(maxRows)        .fill()        .reduce((acc, _, i) => {          const rowData = Array(i+1)                  .fill()                  .map((__,j) =>                     !j || j == i                      ? 1                      : acc[i-1][j-1] + acc[i-1][j]                  )          acc.push(rowData)          return acc        }, [])      triangle.forEach(row => console.log(JSON.stringify(row))).as-console-wrapper{min-height:100%;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript