谁能告诉我这两道简单的前端编程题我挂在哪

134 阅读1分钟

背景

我参加一个外包面试, 面试前有个笔试题, 笔试题放在word文档里面,需要在30分钟内写完题目转交给hr, 1天后给反馈, 我看题目也比较简单差不多10~20分钟左右就写完代码了, 等了一天反馈说笔试挂了, 我也不知道挂在哪个地方,它这个不是线上笔试,不知道是哪个测试用例挂了, 帮忙看看哪个地方有问题呀, 说不定后面你也会遇到这个题目

第一题

问题:实现 compareVersion 方法,用于比较两个版本号(version1、version2)

如果version1 > version2,返回1;

如果version1 < version2,返回-1;

其他情况,返回0。 版本号规则`x.y.z`,xyz均为大于等于0的整数,至少有x位

例如: 

compareVersion('0.1', '1.1.1') // 返回-1

compareVersion('13.37', '1.2 ') // 返回1

compareVersion('1.1', '1.1.0'); // 返回0

compareVersion('1.1', '1.1.1'); // 返回-1

第一题的实现

function compareVersion(version1, version2) {
  // ... 这里写代码实现
  version1 = version1 + ''
  version2 = version2 + ''
  let arr1 = version1.split('.').map((item) => parseInt(item))
  let arr2 = version2.split('.').map((item) => parseInt(item))
  let res = 0
  for (let i = 0; i < 3; i++) {
    let num1 = arr1[i] || 0
    let num2 = arr2[i] || 0
    if (num1 > num2) {
      res = 1
      break
    }
    if (num1 < num2) {
      res = -1
      break
    }
  }
  return res
}

第二题

问题:井字棋游戏。输入一个二维数组代表棋盘,其中『1』代表当前玩家的棋子,『0』代表没有棋子,『-1』代表对方玩家的棋子。 若一方棋子在横、竖、斜方向连成排则为获胜,返回当前玩家是否胜出。示例:入参为 [[1,0,1],[1,-1,-1],[1,-1,0]] 时,返回 true

第二题的实现

function gameCheck(arr) {
  // ... 这里写代码实现
  for (let i = 0; i < 3; i++) {
    let lineCount = 0
    let rowCount = 0
    for (let j = 0; j < 3; j++) {
      if (arr[i][j] === 1) {
        lineCount++
      }
      if (arr[j][i] === 1) {
        rowCount++
      }
    }
    if (lineCount >= 3 || rowCount >= 3) {
      return true
    }
  }
  if (arr[1][1] === 1) {
    if (arr[0][0] === 1 && arr[2][2] === 1) {
      return true
    }
    if (arr[0][2] === 1 && arr[2][0] === 1) {
      return true
    }
    return false
  } else {
    return false
  }
}