如何在JavaScript中高效缩放二维数组?
实现二维数组的指定倍数缩放(最近邻方式)
这其实就是**最近邻缩放(Nearest Neighbor Scaling)**的典型场景——把原数组里的每一个元素,都复制成一个factor×factor的方块,就能得到你想要的缩放后数组啦。咱们一步步来拆解实现逻辑:
核心逻辑拆解
- 横向扩展:把原数组的每一行里的每个元素,重复
factor次,拼接成一行更长的新行 - 纵向扩展:把刚才生成的横向扩展后的行,重复
factor次添加到结果数组里,完成纵向的放大
代码实现(JavaScript)
function scale2DArray(originalArray, factor) { const scaledArray = []; // 遍历原数组的每一行 for (const row of originalArray) { // 先做横向扩展:把每个元素重复factor次,拼接成新行 const scaledRow = row.flatMap(num => Array(factor).fill(num)); // 再做纵向扩展:把这个新行重复factor次加入结果 for (let i = 0; i < factor; i++) { scaledArray.push([...scaledRow]); } } return scaledArray; }
测试你的示例
用你给出的原数组测试一下:
let a = [ [0, 0, 1, 0], [0, 1, 1, 1], [0, 0, 1, 0], [0, 0, 1, 1] ]; // 缩放4倍 let b = scale2DArray(a, 4); console.log(b);
运行后得到的b就是你给出的那种结构——比如原数组第一行[0,0,1,0],会被横向扩展成[0,0,0,0, 0,0,0,0, 1,1,1,1, 0,0,0,0],然后这个行被重复4次,成为b的前4行,完全符合你的示例要求。
补充说明
如果你的需求里有其他缩放方式(比如插值缩放),那逻辑会不一样,但从你给出的示例来看,最近邻缩放完全匹配你的需求——它的优点是实现简单,而且能完美保留原数组里的元素锐利边缘,很适合这种二进制数组的放大场景。
内容的提问来源于stack exchange,提问作者Emmanuel
相关产品推荐
相关产品推荐

