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

如何实现2048风格的一维数组左移合并及计分功能?

问题描述

我有一个包含score计数器和任意一维数字数组的对象,示例如下:

{ score: 0, board: [4, 2, 2] }

需要实现一个函数,完成类似2048游戏中一行方块的左移操作,同时累加计分(比如合并成8则给score加8)。之前找到的函数只实现了合并功能,没有计分逻辑,求完整实现。

测试用例如下:

{ score: 0, board: []          } => { score: 0,    board: []     }
{ score: 0, board: [2,2]       } => { score: 4,    board: [4]    }
{ score: 4, board: [2,2,2]     } => { score: 8,    board: [4,2]  }
{ score: 6, board: [4,2,2]     } => { score: 10,   board: [4,4]  }
{ score: 0, board: [2,2,2,2]   } => { score: 8,    board: [4,4]  }
{ score: 8, board: [4,4]       } => { score: 16,   board: [8]    }
{ score: 2, board: [8,8]       } => { score: 18,   board: [16]   }
{ score: 0, board: [16,16]     } => { score: 32,   board: [32]   }
{ score: 0, board: [1024,1024] } => { score: 2048, board: [2048] }
实现方案

以下是满足需求的JavaScript函数实现,核心逻辑是先过滤空值(如果存在),再遍历合并相邻相等元素并累加得分:

function moveLeft(gameState) {
  // 复制原数据,避免修改输入对象
  const { score: initialScore, board } = gameState;
  let score = initialScore;
  // 过滤掉数组中的0(处理2048中空位的情况)
  const nonZeroNums = board.filter(num => num !== 0);
  const newBoard = [];

  let i = 0;
  while (i < nonZeroNums.length) {
    // 当前元素与下一个元素相等时合并
    if (i + 1 < nonZeroNums.length && nonZeroNums[i] === nonZeroNums[i + 1]) {
      const mergedValue = nonZeroNums[i] * 2;
      newBoard.push(mergedValue);
      score += mergedValue;
      i += 2; // 跳过已合并的下一个元素
    } else {
      newBoard.push(nonZeroNums[i]);
      i += 1;
    }
  }

  return { score, board: newBoard };
}

逻辑说明

  1. 数据隔离:通过解构赋值复制初始分数和数组,避免修改原输入对象
  2. 过滤空值:移除数组中的0(对应2048中的空位),只保留有效数字
  3. 合并与计分:遍历有效数字数组,遇到相邻相等的元素时合并为两倍数值,将合并结果加入新数组,并把合并值累加到分数中,同时跳过已合并的元素
  4. 返回结果:返回包含更新后分数和数组的对象

测试验证

将所有测试用例传入函数,均可得到符合预期的结果:

  • 输入{ score: 0, board: [2,2,2] },返回{ score: 4, board: [4,2] };若初始分数为4,则返回{ score: 8, board: [4,2] },完全匹配测试用例
  • 输入{ score: 0, board: [2,2,2,2] },合并两次得到[4,4],分数累加4+4=8,符合预期

内容的提问来源于stack exchange,提问作者absolutely not the the

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:29:55