为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2024-01-18 16:09:22
我正在尝试创建一个函数,使用 Array.map() 函数在 javascript 中创建帕斯卡三角形。实际上,我正在使用这个功能:let triangle = [],    maxRows = 5    // Columnsfor (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() 内的三角形变量?
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

由于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%;}


查看完整回答
反对 回复 2024-01-18
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信