destructuring assignment(구조분해할당)
- 배열,객체의 각 요소를 한번에 개별 변수로 담을 수 있음.
- 원래 변수에서 어떤 값을 분해해 할당할지 정의함.
<배열 구조 분해>
- 배열의 형태 맞추고
- 순서 맞추면 됨. (받는 변수의 이름은 상관 없음)
const [a, b, c, d, e] = [1, 2, 3, 4, 5];
console.log(a);
console.log(b);
let [first, ...x] = ['a', 'b', 'c', 'd'];
console.log(first, x);
let [a, b, c = 'cherry'] = ['apple', 'banana'];
console.log(a, b, c);
let a = 1;
let b = 2;
[b, a] = [a, b];
console.log(a, b);
✔️ 배열 구조 분해 할당으로 swap하기
const arr = [2, 1, 3, 4, 5];
[arr[0], arr[1]] = [1, 2];
[arr[0], arr[1]] = [arr[1], arr[0]];
<객체 구조 분해>
- 배열은 받을 변수의 인덱스 순서를 생각해야 하는데,
- 객체는 프로퍼티명만 맞으면 되서 순서 신경쓸 필요 없음.
- 객체의 형태 맞추고
- 키값 맞추면 됨 (순서는 상관 없음)
let { age, name } = { name: 'jihyun', age: 20 };
console.log(name, age);
let { a, b, ...x } = { a: 10, b: 20, c: 30, d: 40 };
console.log(a, b, x);
let obj = { p: 42, q: true };
let { p: foo, q: bar } = obj;
console.log(foo, bar);
const App = ()=>{
const mapData = [
{ lat: 33.440689, lng: 126.920708, name: 'welding', active: true, error: true },
{ lat: 33.349512, lng: 126.611391, name: 'dump', active: false, error: false },
{ lat: 33.494913, lng: 126.897931, name: 'conveyer', active: true, error: true },
]
return (
{mapData.map((el, idx) => (
<MarkerRender key={idx} el={el} id={idx} />
))}
}
)
const MarkerRender = (props) => {
console.log(props)
}
const {el,id} = props
const MarkerRender = ({el,id}) => {
console.log(el)
console.log(id)
}