Преобразование строки уровня в массив совершенно другого формата в Javascript - PullRequest
0 голосов
/ 19 июня 2020

Мне нужно преобразовать

[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,]

в

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],]

Я все еще новичок в Javascript, и я пытаюсь работать над редактором уровней для игры, которая Я модифицирую. Я не могу изменить способ загрузки уровней ни в редакторе уровней, ни в самой игре, поэтому мой единственный вариант - преобразовать форматы. Я действительно плохо объясняю свой код, но уровень загружается в игре с использованием «level [x] [y]», а блоки представлены числами в массиве. Я работал над этим несколько дней, поэтому буду благодарен за любую помощь. Ширина уровня будет варьироваться, составляя не менее 20, но высота всегда будет 15. Оба уровня начинаются с точки (0,0). Спасибо за ваше время.

ОБНОВЛЕНИЕ: Мне нужно сделать что-то вроде этого:

Преобразовать 1,2,3,4,5,6,7,8,9 'в [ ['1', '4', '7',], ['2', '5', '8'], ['3', '6', '9']]

( Очевидно, это было бы больше, чем это) Я также могу получить доступ к ширине уровня и использовать ее в коде, а высота всегда будет 15.

ОБНОВЛЕНИЕ: Я понял это. Спасибо вам всем за вашу помощь. Вот код:

function parseLvlObj(lvlObj) {
	lvl = lvlObj.level.split(',');
	lvlHeight = lvlObj.levelheight;
	lvlWidth = lvlObj.levelwidth;
	done1 = [];
	var i,j,temparray,chunk = lvlObj.levelwidth;
	k = 0;
	for (i=0,j=lvl.length; i<j; i+=chunk) {
		temparray = lvl.slice(i,i+chunk);
		done1[k] = temparray;
		k = k + 1;
	}
	done = [];
	done1.pop();
	i = 0;
	j = 0;
	while (i < lvlObj.levelwidth) {
		done[i] = [];
		while (j < lvlObj.levelheight) {
			done[i][j] = done1[j].pop();
			j = j + 1;
		}
		i = i + 1;
		j = 0;
	}
	lvlObj.level = done;
	return lvlObj;
}
level = {"level":"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,","levelwidth":20,"levelheight":15,"exitX":100,"exitY":100};
console.log(parseLvlObj(level))

Ответы [ 3 ]

0 голосов
/ 19 июня 2020

Вы можете использовать метод slice(), делая что-то вроде этого:

Array.prototype.chunk = function (chunkSize) {
  const chunkedArray = [];
  for (let i = 0; i < this.length; i += chunkSize) {
    chunkedArray.push(this.slice(i, i + chunkSize));
  }
  return chunkedArray;
};

Теперь вам просто нужно использовать chunk() в исходном массиве:

const string = "0,1,2,3,4,5,6,7";
// Remove whitespaces and split on each ','
const array = string.replace(/ /g, '').split(',');
const chunked = array.chunk(2);
console.log(chunked);
// [ [ 0, 1 ], [ 2, 3 ], [ 4, 5 ], [ 6, 7 ] ]
0 голосов
/ 19 июня 2020

Использование split, splice и Array.from упростит.

const chunks = (str, size) => {
  const arr = str.split(",");
  return Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>
    arr.slice(i * size, (i + 1) * size)
  );
};

const str = "1,2,3,4,5,6,7,8,9";
console.log(chunks(str, 3));
console.log(chunks(str, 4));
0 голосов
/ 19 июня 2020

То, что вы ищете, обычно называется Chunking. К сожалению, в Javascript (прямо сейчас) нет чистого фрагмента. Я создал простую схему ниже, чтобы показать, как это делается.

var level = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, ]

function chunk(arrayInput, chunkSize) {
  var outArray = []
  while (arrayInput.length) {
    outArray.push(arrayInput.splice(0, chunkSize))
  }
  return outArray;
}

var chunkedLevel = chunk(level,30);
console.log(chunkedLevel)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...