You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:42:34