В настоящее время я собираю функцию в своем приложении и задаюсь вопросом, является ли theres более аккуратным способом написать это с ES6, а не использовать два для циклов.
Целью является создание многомерного массива для отслеживания координат x & y. Это прекрасно работает, но я надеюсь сделать его более аккуратным.
function setBoard() {
boardParts = new Array(tileCount);
for (let i = 0; i < tileCount; ++i) {
boardParts[i] = new Array(tileCount);
for (let j = 0; j < tileCount; ++j) {
boardParts[i][j] = new Object();
boardParts[i][j].x = tileCount - 1 - i;
boardParts[i][j].y = tileCount - 1 - j;
}
}
emptyLoc.x = boardParts[tileCount - 1][tileCount - 1].x;
emptyLoc.y = boardParts[tileCount - 1][tileCount - 1].y;
solved = false;
}
Цените любую помощь!
Спасибо
Если вы хотите перейти на ES6, вы можете использовать Array # from для генерации массивов:
const tileCount = 4;
const boardParts = Array.from({ length: tileCount }, (_, i) =>
Array.from({ length: tileCount }, (_, j) => ({
x: tileCount - 1 - i,
y: tileCount - 1 - j
}))
);
console.log(boardParts);
Там нет ничего особенного в ES2015+, который помогает с этим (ну, кроме Array.from
как указывает Ори Array.from
, чего вы можете или не хотите), но есть несколько вещей, которые вы можете сделать, чтобы улучшить его, которые также были доступны в ES5, см. Комментарии:
function setBoard() {
boardParts = []; // No need to create with initial 'length', generic arrays
// aren't really arrays, no pre-allocation necessary
for (let i = 0; i < tileCount; ++i) {
boardParts[i] = []; // See above
for (let j = 0; j < tileCount; ++j) {
boardParts[i][j] = { // Object initializer rather than
x: tileCount - 1 - i, // 'new Object' and then prop
y: tileCount - 1 - j // assignment
};
}
}
emptyLoc.x = boardParts[tileCount - 1][tileCount - 1].x;
emptyLoc.y = boardParts[tileCount - 1][tileCount - 1].y;
solved = false;
}
Отдельно на вышесказанное: представленная функция ожидает найти boardParts
, tileCount
, emptyLoc
и solved
объявленную в содержащем контексте. Обычно это не идеальный вариант для функций, которые работают исключительно через побочные эффекты, если они не являются объектными инициализаторами какого-то...
emptyLoc.x = emptyLoc.y = 0;
- это всегда одно и то же?