Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   [js] Проблема с массивами. (https://javascript.ru/forum/misc/81299-%5Bjs%5D-problema-s-massivami.html)

OlesiaBOM 05.11.2020 12:14

[js] Проблема с массивами.
 
Доброе время суток!

Нужна функция getLocation, которая будет принимать массив начальных координат coordinates (в виде [x, y]), массив истории команд роботу commands и возвращать массив конечных координат робота в том же виде ( [x, y])

Напомню возможные команды роботу:

"forward" - прямо x + 0, y + 1,
"back" - назад x + 0, y - 1,
"right" - направо x + 1, y + 0,
"left" - налево x - 1, y + 0,

Примеры:

getLocation([0, 0], ['forward', 'right']) === [1, 1]
getLocation([2, 3], ['back', 'back', 'back', 'right']) === [3, 0]
getLocation([0, 5], ['back', 'back', 'back', 'right', 'left', 'forward']) === [0, 3]
Вот кусок программы, идеи кочились((((:-?
function getLocation(coordinates, commands) {
var arr =[0,0];
var arr1 = coordinates;
var arr2=[0,0];
for(var i = 0; i < commands.length; i++){
switch(commands[i]){

case 'forward':
arr2 =[0,1];
for(var i = 0; i < arr2.length; i++) {
arr.push(arr1[i]+arr2[i]);
arr.shift();
}
return arr;

case 'back':
arr2 =[0,-1];
for(var i = 0; i < arr2.length; i++) {
arr.push(arr1[i]+arr2[i]);
arr.shift();
}
return arr;

case 'right':
arr2 =[1,0];
for(var i = 0; i < arr2.length; i++) {
arr.push(arr1[i]+arr2[i]);
arr.shift();
}
return arr;

case 'left':
arr2 =[-1,0];
for(var i = 0; i < arr2.length; i++) {
arr.push(arr1[i]+arr2[i]);
arr.shift();
}
return arr;

}
}
}

voraa 05.11.2020 12:44

Либо у вас все слишком сложно, либо я чего то не понял.
А почему не так
function getLocation(coordinates, commands) {
	const arr =[...coordinates];
	for(let i = 0; i < commands.length; i++){
		switch(commands[i]){
			case 'forward': arr[1]++; break;
			case 'back': arr[1]--; break;
			case 'right': arr[0]++; break;
			case 'left': arr[0]--; break;
		}
	}
	return arr;
}

console.log( getLocation([0, 0], ['forward', 'right']) ); 
console.log( getLocation([2, 3], ['back', 'back', 'back', 'right']) );
console.log( getLocation([0, 5], ['back', 'back', 'back', 'right', 'left', 'forward']) );

Alexandroppolus 05.11.2020 12:51

function getLocation(coordinates, commands) {
  var arr = coordinates.slice();
  commands.forEach(cmd => {
    arr[0] += cmd === 'left' ? -1 : cmd === 'right' ? 1 : 0
    arr[1] += cmd === 'back' ? -1 : cmd === 'forward' ? 1 : 0
  })
  return arr;
}

OlesiaBOM 05.11.2020 12:59

Спасибо за помощь!

OlesiaBOM 05.11.2020 13:03

Нет у меня сложно :lol:


Часовой пояс GMT +3, время: 12:51.