چون مشکلمونو حل میکنه. یک مثال ببینیم.
این یک آبجکت ساده شامل اسم 5 نفره.
const names = { hamidreza: 'Hamidreza', cinna: 'Cinna', amir: 'Amir', pooya: 'Pooya', majid: 'Majid' };
اگه ازت بخوام این اسمارو روی کنسول چاپ کنی، احتمالا اینجوری مینویسی.
console.log(names.hamidreza); console.log(names.cinna); console.log(names.amir); console.log(names.pooya); console.log(names.majid);
کار میکنه. ولی این نقطه گذاری* خیلی منزجرکنندست. چجوری بهترش کنیم؟
const hamidreza = names.hamidreza; const cinna = names.cinna; const amir = names.amir; const pooya = names.pooya; const majid = names.majid; console.log(hamidreza); console.log(cinna); console.log(amir); console.log(pooya); console.log(majid);
خیلی بهتر شد. ولی خب هنوزم داریم همون کارو تکرار میکنیم. حالا اگه بتونیم در یک خط این متغیرهارو مقداردهی کنیم چی میشه؟
بهتر میشه مگه نه؟ اینجاست که destructuring بدردمون میخوره. میتونیم اینجوری بنویسیم:
const { hamidreza, cinna, amir, pooya, majid } = names; console.log(hamidreza); console.log(cinna); console.log(amir); console.log(pooya); console.log(majid);
خیلی بهتر از قبل شد!
سادست. مشخصه های آبجکت* رو بیرون میکشیم و به متغیر انتساب میدیم. و اسم متغیر هم بصورت پیش فرض مشابه اسم مشخصه ست. میتونی اینجوری تغییرش بدی.
const { hamidreza: hamid, cinna, amir, pooya, majid } = names;
برای آرایه چند تفاوت داریم.
میدونیم که داده آرایه با اندیس ذخیره میشه که به ترتیبه. پس، باید ترتیب رو رعایت کنیم:
const arr = ['hamidreza', 'cinna']; const [hamidreza, cinna] = arr;
اینم میدونیم که آرایه مشخصه نداره. پس، هر اسمی که دلت بخواد میتونی انتخاب کنی.
چندتا مثال از تخریب ساختار destructuring برای آبجکت و آرایه ببینیم.
let a = 1; let b = 3; [a, b] = [b, a]; console.log(a); // 3 console.log(b); // 1
function f() { return [1, 2, 3]; }; const [a, , b] = f(); console.log(a); // 1 console.log(b); // 3
let a, b; [a=5, b=7] = [1]; console.log(a); // 1 console.log(b); // 7
این تکنیک برای props خیلی بدرد میخوره.
const hamidreza = { name: 'Hamidreza', age: 30 }; const statement = ({name, age}) => { return `My name is ${name}. I am ${age} years old.` }; statement(hamidreza);
const profile = { name: 'Hamidreza', age: 30, professional: { profession: 'Frontend Developer' } }; const {name, age, professional: {profession}} = profile; console.log(professional); // error console.log(profession); // Frontend Developer
const {a = 10, b = 5} = {a: 3}; console.log(a); // 3 console.log(b); // 5
* نقطه گذاری = dot notation
* مشخصه های آبجکت = object properties
* انتساب مقادیر پیش فرض = default assignment
* تخریب ساختار تو در تو = nested destructuring