Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript ES6中从功能上遍历矩阵?_Javascript_Matrix_Foreach_Functional Programming - Fatal编程技术网

如何在JavaScript ES6中从功能上遍历矩阵?

如何在JavaScript ES6中从功能上遍历矩阵?,javascript,matrix,foreach,functional-programming,Javascript,Matrix,Foreach,Functional Programming,以下是我提交的关于Hackerrank挑战“楼梯”的代码: 功能楼梯{ //fill填写“未定义”项,这有助于创建新的n*n矩阵 让matrix=Arrayn.fill.map=>Arrayn.fill; matrix.foreachcurar,idY=>{ curArr.forEachcurVal,idX=>{ 曲线=idX+idY+1>=n?:''; process.stdout.writecurVal; }, [] console.log; }, []; } 当我使用楼梯6进行测试时,我确

以下是我提交的关于Hackerrank挑战“楼梯”的代码:

功能楼梯{ //fill填写“未定义”项,这有助于创建新的n*n矩阵 让matrix=Arrayn.fill.map=>Arrayn.fill; matrix.foreachcurar,idY=>{ curArr.forEachcurVal,idX=>{ 曲线=idX+idY+1>=n?:''; process.stdout.writecurVal; }, [] console.log; }, []; } 当我使用楼梯6进行测试时,我确实得到了预期的结果:

但是,当我修改代码以检查矩阵时,如下所示:

功能楼梯{ //fill填写“未定义”项,这有助于创建新的n*n矩阵 让matrix=Arrayn.fill.map=>Arrayn.fill; matrix.foreachcurar,idY=>{ curArr.forEachcurVal,idX=>{ 曲线=idX+idY+1>=n?:''; }, [] }, []; console.logmatrix; } 以下是我得到的:

[ [ undefined, undefined, undefined, undefined, undefined, undefined ],
  [ undefined, undefined, undefined, undefined, undefined, undefined ],
  [ undefined, undefined, undefined, undefined, undefined, undefined ],
  [ undefined, undefined, undefined, undefined, undefined, undefined ],
  [ undefined, undefined, undefined, undefined, undefined, undefined ],
  [ undefined, undefined, undefined, undefined, undefined, undefined ] ]
因此,我的问题是:

为什么不修改矩阵? 是否有任何纯功能性的方法来解决这个问题,即仅使用map? 问题的原因 curVal是值类型,而不是引用类型。矩阵中的值不会被修改,因为curVal只是一个副本

一种解决方案:改变曲线=idX+idY+1>=n?:“”;进入矩阵[idY][idX]=idX+idY+1>=n?:“”

使用地图
这就是我要做的

const array=length,lookup=>array.from{length},i=>lookupi; 常量字符串=分隔符,长度,查找=>arraylength,lookup.joinseparator; 常数楼梯=n=> console.log 字符串\n,n,i=> 字符串,n,j=> i+j楼梯9 你练习的重点是决定是打印一个空格还是一个空白。。。它基于列索引和行索引之间的差异j>=i

const stairate=length=>Array.from{length},x=> Array.from{length},z,y=>y>=length-1-x?:''。参加 。加入“\n”; console.log 楼梯10,
;我绝对喜欢这个解决方案,因为它意味着在这个阶梯问题中,临时数组的索引引用是操作的主要关注点,而不是值引用。感谢这个直观的解决方案!我花了一段时间才明白spread操作符在这里做什么!谢谢,这太棒了!
[...Array(n).keys()].map((ignore, y)=>[...Array(n).keys()].map((ignore, x)=>(x+y+2>n)?'#':' '))