如何实现多维数组的水平与垂直双向反转?
问题原因
你现有代码的执行结果和预期不符的核心逻辑是:
Array.prototype.reverse()是原地修改方法,你在map回调内调用row.reverse()会直接修改原数组的每一行,所以你能看到水平翻转的效果map方法不会修改原数组,会返回一个新数组,你后续调用的.reverse()是作用在map返回的临时新数组上,没有把结果赋值回原变量,所以垂直翻转的效果没有落地到原数组上
调整方案
方案1:直接修改原数组
// 先逐行水平反转 gameDetails.currentPositionPieceValues.forEach(row => row.reverse()) // 再整体垂直反转 gameDetails.currentPositionPieceValues.reverse()
方案2:不污染原数组,返回新的反转后数组
如果需要保留原始数组数据,先对每一行做浅拷贝再执行反转:
const reversedPieceValues = gameDetails.currentPositionPieceValues .map(row => [...row].reverse()) // 拷贝每行后再反转,不修改原行数据 .reverse()
两种方案都可以同时完成水平+垂直的双向反转效果,按需选择即可。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

