javascript 来自命令的JS坐标

3lxsmp7m  于 2023-11-15  发布在  Java
关注(0)|答案(3)|浏览(101)

我有一些任务要解决,当我们需要从命令中更新坐标数组时,就像这样。当forward - y加1,back - y减1,right - x加1和left - x减1时。但是这里有些东西不能正常工作。

function getLocation(coordinates, commands) {
  // write code here
  let x = coordinates[0]
  let y = coordinates[1]
  //let newCoordinates = [];

    for (let i = 0; i < commands.length; i++) {
     if (i === 'forward' ) {
          y += 1 ;
          }
       if (i === 'back') {
         y -= 1 ;
      }
      if (i === 'right') {
      x +=  1;
      }
      if (i === 'left') {
      x -= 1;
    }

 }
 //newCoordinates.push(x, y)
return coordinates;

}
 console.log(getLocation([0, 0], ['forward', 'forward', 'left']))

字符串

uqdfh47h

uqdfh47h1#

在循环时,你没有访问commands数组中的值。此时你正在比较i'forward''back'还是其他命令。
您应该做的是通过访问值. commands[i] === 'forward'来比较commands数组中的每个值,依此类推。
返回coordinates数组不会给予更新后的值,因为修改xy不会更新coordinates数组中的值。解决这个问题的最简单方法是返回一个新数组,其中包含xy,如下所示:return [x, y];

function getLocation(coordinates, commands) {
  let x = coordinates[0]
  let y = coordinates[1]

  for (let i = 0; i < commands.length; i++) {
    if (commands[i] === 'forward') {
      y += 1;
    }
    
    if (commands[i] === 'back') {
      y -= 1;
    }
    
    if (commands[i] === 'right') {
      x += 1;
    }
    
    if (commands[i] === 'left') {
      x -= 1;
    }
  }
  
  return [x, y];
}

console.log(getLocation([0, 0], ['forward', 'forward', 'left']))

字符串
我还冒昧地修改了你的函数,使用destructuring assignmentrest parameter作为例子,说明如何以不同的方式实现函数。不知道这是否对你有帮助,但我认为你还在学习,这可能会扩大你的知识基础。

function getLocation([x, y], ...commands) {
  for (command of commands) {
    if (command === 'forward') {
      y += 1;
    }
    
    else if (command === 'back') {
      y -= 1;
    }
    
    else if (command === 'right') {
      x += 1;
    } 
    
    else if (command=== 'left') {
      x -= 1;
    }
  }
  
  return [x, y];
}

console.log(getLocation([0, 0], 'forward', 'forward', 'left'))

bvn4nwqk

bvn4nwqk2#

你正在使用索引来检查命令,你应该像这样在条件语句中使用数组的值

function getLocation(coordinates, commands) {
  let x = coordinates[0]
  let y = coordinates[1]
  let newCoordinates = [];
  
  commands.forEach((command) => {
      if (command === 'forward' ) {
          y += 1 ;
      }
      if (command === 'back') {
         y -= 1 ;
      }
      if (command === 'right') {
        x +=  1;
      }
      if (command === 'left') {
        x -= 1;
      }
  })

  newCoordinates.push(x, y)
  return newCoordinates;

}
 console.log(getLocation([0, 0], ['forward', 'forward', 'left']))

字符串

7z5jn7bk

7z5jn7bk3#

考虑下面的例子。

function getLocation(coord, commands) {
  $.each(commands, function(i, command) {
    switch (command) {
      case 'forward':
        coord[1]++;
        break;
      case 'back':
        coord[1]--;
        break;
      case 'right':
        coord[0]++;
        break;
      case 'left':
        coord[0]--;
    }
  });
  return coord;
}
console.log(getLocation([0, 0], ['forward', 'forward', 'left']))

个字符
这是一个非常好的switch()用法。您不需要分隔坐标数组的各个部分;您可以使用运算符++--操作数组中的值。
你可以在jQuery中使用$.each(),也可以使用for()循环。在这种情况下,两者都没有优势。

相关问题