सुनिश्चित नहीं है कि इस शब्दकोश के संबंध में लूप के भीतर तारों की सूची के माध्यम से कैसे विश्लेषण किया जाए।

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
1
bombombs 15 जिंदा 2022, 15:11

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();
1
Eduard 15 जिंदा 2022, 15:18

आप जांच सकते हैं कि प्रकार एक ऐरे है या नहीं:

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);
        }
    });
}
0
Noyan Alimov 15 जिंदा 2022, 15:21

केवल उपनाम प्राप्त करने के लिए 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())
0
TAHER El Mehdi 15 जिंदा 2022, 15:29

यदि 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);
0
TechySharnav 15 जिंदा 2022, 15:39

रिकर्सन पर आधारित एक सरल समाधान।

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"
0
samehanwar 15 जिंदा 2022, 15:37