सुनिश्चित नहीं है कि इस शब्दकोश के संबंध में लूप के भीतर तारों की सूची के माध्यम से कैसे विश्लेषण किया जाए।
var student_nicknames = [
{name: "William", nickname: "Bill"},
{name: "Joseph", nickname: "Joe"},
{name: "Maria", nickname: "Mary"},
{name: "Richard", nickname: ["Rick", "Ricky"]},
{name: "Elizabeth", nickname: ["Liz", "Lisa", "Beth"]}
];
total_nicknames = function(){
student_nicknames.forEach(function(student) {
console.log(student.nickname);
});
}
उत्पादन
Bill
Joe
Mary
[ 'Rick', 'Ricky' ]
[ 'Liz', 'Lisa', 'Beth' ]
वांछित आउटपुट
Bill
Joe
Mary
Rick
Ricky
Liz
Lisa
Beth
5 जवाब
आपको केवल यह जांचने के लिए एक if
शर्त रखने की आवश्यकता है कि क्या प्रत्येक छात्र की उपनाम संपत्ति एक सरणी है या नहीं, यदि यह एक सरणी है, तो आप इसके माध्यम से लूप कर सकते हैं और प्रत्येक आइटम को अलग-अलग प्रिंट कर सकते हैं, अन्यथा अपने का पालन करें तर्क।
var student_nicknames = [
{ name: "William", nickname: "Bill" },
{ name: "Joseph", nickname: "Joe" },
{ name: "Maria", nickname: "Mary" },
{ name: "Richard", nickname: ["Rick", "Ricky"] },
{ name: "Elizabeth", nickname: ["Liz", "Lisa", "Beth"] }
];
const total_nicknames = function () {
student_nicknames.forEach(function (student) {
if (Array.isArray(student.nickname)) { // <- HERE
student.nickname.forEach((e) => console.log(e));
} else {
console.log(student.nickname);
}
});
};
total_nicknames();
आप जांच सकते हैं कि प्रकार एक ऐरे है या नहीं:
total_nicknames = function(){
student_nicknames.forEach(function(student) {
if (Array.isArray(student.nickname)) {
student.nickname.forEach(function (nickname) {
console.log(nickname)
})
} else {
console.log(student.nickname);
}
});
}
केवल उपनाम प्राप्त करने के लिए map()
का उपयोग करें और फिर सरणी को समतल करने के लिए flat()
का उपयोग करें।
var student = [
{name: "William", nickname: "Bill"},
{name: "Joseph", nickname: "Joe"},
{name: "Maria", nickname: "Mary"},
{name: "Richard", nickname: ["Rick", "Ricky"]},
{name: "Elizabeth", nickname: ["Liz", "Lisa", "Beth"]}
];
console.log(student.map(({nickname})=>nickname).flat())
यदि student.nickname
एक सरणी है, तो आप total_nicknames
फ़ंक्शन को फिर से कॉल करके, एक छोटा पुनरावर्ती लूप बना सकते हैं। उपनाम प्राप्त करने के लिए आपको ||
(OR) ऑपरेटर का उपयोग करने की भी आवश्यकता है (जो एक स्ट्रिंग होगी, यदि वह सरणी पर लूप करती है) और नहीं undefined
(चूंकि स्ट्रिंग ऑब्जेक्ट का कोई उपनाम नहीं है विधि / संपत्ति)।
var student_nicknames = [{
name: "William",
nickname: "Bill"
},
{
name: "Joseph",
nickname: "Joe"
},
{
name: "Maria",
nickname: "Mary"
},
{
name: "Richard",
nickname: ["Rick", "Ricky"]
},
{
name: "Elizabeth",
nickname: ["Liz", "Lisa", "Beth"]
}
];
total_nicknames = function(arr) {
arr.forEach(function(student) {
if (Array.isArray(student.nickname)) {
total_nicknames(student.nickname)
} else
console.log((student.nickname || student));
});
}
total_nicknames(student_nicknames);
रिकर्सन पर आधारित एक सरल समाधान।
function total_nicknames(student_nicknames) {
for(let i = 0; i < student_nicknames.length; i++){
let student = student_nicknames[i];
if(typeof student === 'object' && student !== null) {
if(Array.isArray(student.nickname)){
total_nicknames(student.nickname);
}else {
console.log(student.nickname);
}
}else {
console.log(student);
}
}
}
console.log(total_nicknames(student_nicknames));
/* output */
// "Bill"
// "Joe"
// "Mary"
// "Rick"
// "Ricky"
// "Liz"
// "Lisa"
// "Beth"