আপনি যদি না চান তবে আপনাকে ধাপে ধাপে এটি করতে হবে TypeErrorকারণ কোনও সদস্য যদি হয় nullবা undefinedআপনি এবং কোনও সদস্যের অ্যাক্সেস করার চেষ্টা করেন তবে একটি ব্যতিক্রম ছুঁড়ে দেওয়া হবে।
আপনি হয় কেবল catchব্যতিক্রম করতে পারেন , বা একাধিক স্তরের অস্তিত্ব পরীক্ষা করতে একটি ফাংশন তৈরি করতে পারেন, এরকম কিছু:
function checkNested(obj /*, level1, level2, ... levelN*/) {
var args = Array.prototype.slice.call(arguments, 1);
for (var i = 0; i < args.length; i++) {
if (!obj || !obj.hasOwnProperty(args[i])) {
return false;
}
obj = obj[args[i]];
}
return true;
}
var test = {level1:{level2:{level3:'level3'}} };
checkNested(test, 'level1', 'level2', 'level3'); // true
checkNested(test, 'level1', 'level2', 'foo'); // false
ES6 আপডেট:
এখানে ES6 বৈশিষ্ট্য এবং পুনরাবৃত্তি (এটি যথাযথ লেজ কল আকারেও রয়েছে) ব্যবহার করে মূল ফাংশনের একটি সংক্ষিপ্ত সংস্করণ রয়েছে :
function checkNested(obj, level, ...rest) {
if (obj === undefined) return false
if (rest.length == 0 && obj.hasOwnProperty(level)) return true
return checkNested(obj[level], ...rest)
}
তবে, আপনি যদি কোনও নেস্টেড সম্পত্তির মূল্য পেতে চান এবং কেবল তার অস্তিত্বই যাচাই করেন না, তবে এখানে একটি সাধারণ এক-লাইন ফাংশন রয়েছে:
function getNested(obj, ...args) {
return args.reduce((obj, level) => obj && obj[level], obj)
}
const test = { level1:{ level2:{ level3:'level3'} } };
console.log(getNested(test, 'level1', 'level2', 'level3')); // 'level3'
console.log(getNested(test, 'level1', 'level2', 'level3', 'length')); // 6
console.log(getNested(test, 'level1', 'level2', 'foo')); // undefined
console.log(getNested(test, 'a', 'b')); // undefined
উপরের ফাংশনটি আপনাকে নেস্টেড বৈশিষ্ট্যগুলির মান পেতে অনুমতি দেয়, অন্যথায় ফিরে আসবে undefined।
আপডেট 2019-10-17:
ঐচ্ছিক chaining প্রস্তাব উপর পর্যায় 3 পৌঁছে নাম ECMAScript কমিটি প্রক্রিয়া , এই অনুমতি দেবে আপনি নিরাপদে এক্সেস গভীরভাবে নেস্টেড সম্পত্তি, টোকেন ব্যবহার দ্বারা ?.নতুন ঐচ্ছিক chaining অপারেটর :
const value = obj?.level1?.level2?.level3
অ্যাক্সেস করা স্তরের কোনওটি যদি হয় nullবা undefinedঅভিব্যক্তিটি undefinedনিজে থেকেই সমাধান হয়ে যায়।
প্রস্তাবটি আপনাকে পদ্ধতি কলগুলি নিরাপদে পরিচালনা করতে দেয়:
obj?.level1?.method();
উপরের এক্সপ্রেশনটি উত্পন্ন করবে undefinedযদি obj, obj.level1বা obj.level1.methodহয় nullবা undefinedঅন্যথায় এটি ফাংশনটি কল করে।
Babচ্ছিক চেইন প্লাগইন ব্যবহার করে আপনি বাবেলের সাথে এই বৈশিষ্ট্যটি খেলতে শুরু করতে পারেন ।
যেহেতু হট্টগোল 7.8.0 , ES2020 ডিফল্ট দ্বারা সমর্থিত
বাবেল আরপিএলে এই উদাহরণটি দেখুন ।
আপডেট: ডিসেম্বর 2019 🎉🎉
Cচ্ছিক শৃঙ্খলা সংক্রান্ত প্রস্তাব টিসি 39 কমিটির 2019 ডিসেম্বরে অবশেষে পর্যায় 4 এ পৌঁছেছে । এর অর্থ এই বৈশিষ্ট্যটি ECMAScript 2020 স্ট্যান্ডার্ডের অংশ হবে ।