이차원배열 Array.from() arr.fill()
Array.from()
반환값 [ 배열 ]
Array.from(arrayLIke, [mapFn] ,[thisArg])
arrayLike = 배열로 변환할 *유사배열객체 반복가능한 객체
mapFn = 모든 요소를 호출할 *맵핑 함수
thisArg = mapFn실행 시 this로 사용할 값
예)
Array.from({ length: 3 }, () => Array(4).fill(0));
[3][4] = [0,0,0],[0,0,0],[0,0,0],[0,0,0]
*유사배열객체란?
// 이것들은 모두 유사 배열 객체입니다
const arrayLike1 = { length: 3 };
const arrayLike2 = { 0: 'a', 1: 'b', 2: 'c', length: 3 };
const arrayLike3 = { length: 5, 0: 'first', 4: 'last' };
Array.from()과 사용하면 이러함
Array.from(arrayLike1): [undefined, undefined, undefined]
Array.from(arrayLike2): ['a', 'b', 'c']
Array.from(arrayLike3): ['first', undefined, undefined, undefined, 'last']
아하~ key값은 index구나
그래서 length: 는 전체크기를 가리키고
{length:3}이 어떻게 동작하는가?
const obj = { length: 3 };
// Array.from()은 이 객체를 다음과 같이 해석합니다:
// "length가 3이니까, 3개 요소를 가진 배열을 만들어야겠다"
// "0, 1, 2 인덱스의 값을 확인해보자"
console.log(obj[0]); // undefined (없으니까)
console.log(obj[1]); // undefined
console.log(obj[2]); // undefined
// 결과적으로 [undefined, undefined, undefined] 배열이 생성됩니다
const result = Array.from(obj);
console.log(result); // [undefined, undefined, undefined
---
mapFn()
function mapFn(element, index, array) {
// element: 현재 요소의 값
// index: 현재 요소의 인덱스
// array: 현재 배열
return 변환된값; // 새 배열에 들어갈 값
}
아하 그니까
mapFn까지는 일차원배열임
그 배열의 요소를 가지고 멀 할꺼냐 이건데
이제 그 요소에 .Array(4).fill()로 넣는거임 이차원배열을!
---
fill()
반환값 원본배열
arr.fill(value, start, end)
- value: 배열을 채울 값 (필수)
- start: 시작 인덱스 (선택사항, 기본값: 0)
- end: 끝 인덱스 (선택사항, 기본값: 배열 길이, 이 인덱스는 포함되지 않음)
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
function solution(n) {
return Array(n).fill().map((_, i) => Array(n).fill().map(($, j) => i === j ? 1 : 0));
}
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
내가 원했던 코드는 이거시다,,,
단위 행렬을 만드는 코드란다
Array(n).fill()
// n개의 undefined로 채워진 배열 생성
for문 대신 _,i 로 인덱스를 가져온다
.map((_, i) => ...)
// 각 행(row)을 처리하는 부분
// _: 현재 요소 (undefined, 사용하지 않음)
// i: 현재 행 인덱스 (0, 1, 2, ...)
Array(n).fill().map(($, j) => i === j ? 1 : 0)
// 각 열(column)을 처리하는 부분
// $: 현재 요소 (undefined, 사용하지 않음)
// j: 현재 열 인덱스 (0, 1, 2, ...)
// i === j ? 1 : 0: 대각선이면 1, 아니면 0
근데 얘는 왜 $ 이거 쓰는거지
= 중첩레벨에 따라 다르게 쓴다고 한다~
둘 다 '사용하지 않는다'는 의미는 같지만
변수명에 차이를 둔다고 생각하면 됨!!
// 레벨 1: _
// 레벨 2: $
// 레벨 3: __ (만약 있다면)
싹 다 _언더스코어로 해도 상관은 없으나
가독성이 뒤지잔어
i === j ? 1 : 0
// i: 행 번호
// j: 열 번호
// 행 번호와 열 번호가 같으면 대각선 → 1
// 다르면 → 0
---
내가 가독성 좋게 써봄
solution=(n)=>{
let arr1,arr2 =Array(n).fill();
arr1.map((_,i)=>{
arr2.map(($,j)=>{
i===j?1:0;
})
})
return arr1
}
안됨!!!!!! 이유는 이러함!
let arr1,arr2 =Array(n).fill();
이 문법이 안됨!!
이렇게 쓰면 arr1은 undefined 상태가 됨
원래 되지 않았나?????흥~~~
안된다네요 나 머랑 헷갈렸냐
그리고~ map 이 새로운 배열을 뱉어내는건데
그걸 받아낼 return 이나 변수가 업섯슴~~~~ 엣쿙
내가 자꾸 헷갈리는 이유는
한 줄로 쓰면 리턴할 필요가 없음!!!
그래서 내가 자꾸 리턴이 있는지 없는지 헷갈리는거임!!!!!
solution = (n) => {
let arr1 = Array(n).fill(),
arr2 = Array(n).fill(); // arr1 arr2 배열 초기화
return arr1.map((_, i) => {
return arr2.map(($, j) => {
return i === j ? 1 : 0;
});
});
};
정말,,어렵꾼,,
앞으로는 한 줄로 쓰는 것도,, 풀어서 가독성 좋게 쓰는 것도 해봐야겠씀
---
나선형 수업


핵심은 다음값이 undefined가 아니면 상태변환 flag를 변경한다
solution = (n)=>{
let arr1 = Array(n).fill(),arr2=Array(n).fill();
return arr1.map((c,i)=>{
return arr2.map(($,j)=>{
return j++;
console.log(j);
})
})
}
일단 못한 코드
map으로 접근하는게 아닌거가틈