ECMAScript 6에서 for 루프는 사용하지 않고 임의의 요소 수의 배열을 만듭니다.
Array
클래스의 메소드를 사용하면(자), for
루프는 사용하지 않고 배열 요소가 처리할 수 있습니다. 다만, 원래가 되는 배열이 없을 때, 필요한 요소가 납입된 배열을 어떻게 만들면 좋은가 생각해야 합니다.for 루프에서 Canvas에 그리는 샘플 코드
제목 for
루프를 사용하는 함수는 다음 코드 001입니다 ( "스타일과 색상 적용"참조). 색상이 변경된 작은 사각형을 Canvas에 타일 모양으로 정렬합니다. 인수는 작은 정사각형의 한 변의 길이와, 종횡에 늘어놓을 수 있는 개수입니다. draw(25, 4)
에서 호출하면 Canvas는 다음 그림 001의 모양을 그립니다. jsdo.it에 "Drawing squares on Canvas with for loop"로 내걸었습니다.
코드 001 ■ for 루프를 사용하여 Canvas에 그리기
function draw(side, count) {
var context2d = document.getElementById('myCanvas').getContext('2d');
var amount = count * count;
var angle = 360 / (amount - 1);
for (var i = 0; i < count; i++) {
for (var j = 0; j < count; j++) {
context2d.fillStyle = 'hsl(' + angle * (i * count + j) + ', 100%, 50%)';
context2d.fillRect(j * side, i * side, side, side);
console.log(angle * (i * count + j));
}
}
}
그림 001 ■ 색조가 바뀐 사각형이 타일로 늘어서 있습니다.
생각하는 것은, Array()
생성자로 길이를 결정해 만든 배열에, 요소는 Array.map() 메서드 그리고 더하는 방법입니다. 그런데 반환되는 것은 빈 배열입니다. Array.map()
메서드는 값이 (undefined 되어도) 대입되어 있지 않은 요소에 대해서는, 콜백을 호출하지 않는다 입니다.
new Array(amount).map(() => 0) // []
Array.fill() 메서드로 배열 요소 채우기
ECMAScript 6에 제공된 Array.fill() 메서드 메서드는 인수 값을 지정된 인덱스에 할당합니다. 이것으로, 길이를 정한 배열의 요소는 메우기 때문에, Array.map()
메소드를 호출할 수 있습니다.
이전 코드 001의 for
문을 사용한 처리는 다음의 코드 002와 같이 Array
클래스의 메소드로 바꿀 수 있습니다. jsdo.it에도 「 ES6: Drawing squares on Canvas with Array methods 」를 내걸었습니다.
코드 002 ■ for 문은 사용하지 않고 Array 클래스의 메서드로 처리
function draw(side, count) {
const context2d = document.getElementById('myCanvas').getContext('2d');
const amount = count * count;
const angle = 360 / (amount - 1);
new Array(amount).fill(0, 0).map((data, i) => ({
color: `hsl(${angle * i}, 100%, 50%)`,
x: i % count * side,
y: Math.floor(i / count) * side
}))
.forEach((data) => {
context2d.fillStyle = data.color;
context2d.fillRect(data.x, data.y, side, side);
});
}
Array.from() 메서드로 새로운 요소의 배열을 만든다.
ECMAScript 2015의 Array
클래스에는 Array.from() 메서드도 추가되었습니다. 배열형(array-like) 혹은 반복 가능(iterable) 오브젝트로부터, 새롭게 Array
인스턴스를 만드는 것이 원래의 역할입니다. 그러나 두 번째 인수는 맵에 대한 콜백 함수를 제공합니다. 그리고, 제1 인수가 길이를 결정한 것만의 요소가 없는 배열에서도, 콜백 함수를 호출할 수 있는 것입니다.
이전 코드 002는, Array.from()
메소드를 사용해 다음과 같이 재기입할 수도 있습니다.
// new Array(amount).fill(0, 0).map((data, i) => ({
Array.from(new Array(amount), (data, i) => ({
// プロパティ
}))
스프레드 연산자로 배열 요소 분리
ECMAScript 2015에는 스프레드 연산자 ...이 있습니다. 배열 요소를 나누어 부모 배열의 요소로 할 수 있습니다. 이 연산자를 사용하여 이전 코드 002는 다음과 같이 다시 작성할 수도 있습니다.
[...new Array(amount)].map((data, i) => ({
// プロパティ
}))
[2018년 1월 23일: 본항을 추가]
Reference
이 문제에 관하여(ECMAScript 6에서 for 루프는 사용하지 않고 임의의 요소 수의 배열을 만듭니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/FumioNonaka/items/079472451c5e82a46141
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function draw(side, count) {
var context2d = document.getElementById('myCanvas').getContext('2d');
var amount = count * count;
var angle = 360 / (amount - 1);
for (var i = 0; i < count; i++) {
for (var j = 0; j < count; j++) {
context2d.fillStyle = 'hsl(' + angle * (i * count + j) + ', 100%, 50%)';
context2d.fillRect(j * side, i * side, side, side);
console.log(angle * (i * count + j));
}
}
}
new Array(amount).map(() => 0) // []
ECMAScript 6에 제공된 Array.fill() 메서드 메서드는 인수 값을 지정된 인덱스에 할당합니다. 이것으로, 길이를 정한 배열의 요소는 메우기 때문에,
Array.map()
메소드를 호출할 수 있습니다.이전 코드 001의
for
문을 사용한 처리는 다음의 코드 002와 같이 Array
클래스의 메소드로 바꿀 수 있습니다. jsdo.it에도 「 ES6: Drawing squares on Canvas with Array methods 」를 내걸었습니다.코드 002 ■ for 문은 사용하지 않고 Array 클래스의 메서드로 처리
function draw(side, count) {
const context2d = document.getElementById('myCanvas').getContext('2d');
const amount = count * count;
const angle = 360 / (amount - 1);
new Array(amount).fill(0, 0).map((data, i) => ({
color: `hsl(${angle * i}, 100%, 50%)`,
x: i % count * side,
y: Math.floor(i / count) * side
}))
.forEach((data) => {
context2d.fillStyle = data.color;
context2d.fillRect(data.x, data.y, side, side);
});
}
Array.from() 메서드로 새로운 요소의 배열을 만든다.
ECMAScript 2015의 Array
클래스에는 Array.from() 메서드도 추가되었습니다. 배열형(array-like) 혹은 반복 가능(iterable) 오브젝트로부터, 새롭게 Array
인스턴스를 만드는 것이 원래의 역할입니다. 그러나 두 번째 인수는 맵에 대한 콜백 함수를 제공합니다. 그리고, 제1 인수가 길이를 결정한 것만의 요소가 없는 배열에서도, 콜백 함수를 호출할 수 있는 것입니다.
이전 코드 002는, Array.from()
메소드를 사용해 다음과 같이 재기입할 수도 있습니다.
// new Array(amount).fill(0, 0).map((data, i) => ({
Array.from(new Array(amount), (data, i) => ({
// プロパティ
}))
스프레드 연산자로 배열 요소 분리
ECMAScript 2015에는 스프레드 연산자 ...이 있습니다. 배열 요소를 나누어 부모 배열의 요소로 할 수 있습니다. 이 연산자를 사용하여 이전 코드 002는 다음과 같이 다시 작성할 수도 있습니다.
[...new Array(amount)].map((data, i) => ({
// プロパティ
}))
[2018년 1월 23일: 본항을 추가]
Reference
이 문제에 관하여(ECMAScript 6에서 for 루프는 사용하지 않고 임의의 요소 수의 배열을 만듭니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/FumioNonaka/items/079472451c5e82a46141
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// new Array(amount).fill(0, 0).map((data, i) => ({
Array.from(new Array(amount), (data, i) => ({
// プロパティ
}))
ECMAScript 2015에는 스프레드 연산자 ...이 있습니다. 배열 요소를 나누어 부모 배열의 요소로 할 수 있습니다. 이 연산자를 사용하여 이전 코드 002는 다음과 같이 다시 작성할 수도 있습니다.
[...new Array(amount)].map((data, i) => ({
// プロパティ
}))
[2018년 1월 23일: 본항을 추가]
Reference
이 문제에 관하여(ECMAScript 6에서 for 루프는 사용하지 않고 임의의 요소 수의 배열을 만듭니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/FumioNonaka/items/079472451c5e82a46141텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)