Tidak yakin bagaimana mengurai daftar string dalam satu lingkaran mengenai kamus ini.

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); 
    });
}

Keluaran

Bill
Joe
Mary
[ 'Rick', 'Ricky' ]
[ 'Liz', 'Lisa', 'Beth' ]

Keluaran yang diinginkan

Bill
Joe
Mary
Rick
Ricky
Liz
Lisa
Beth
1
bombombs 15 Januari 2022, 15:11

5 jawaban

Jawaban Terbaik

Yang perlu Anda lakukan adalah memiliki kondisi if untuk memeriksa apakah properti nama panggilan setiap siswa adalah array atau bukan, jika itu adalah array, maka Anda dapat mengulangnya dan mencetak setiap item satu per satu, jika tidak ikuti perintah Anda logika.

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 Januari 2022, 15:18

Anda dapat memeriksa apakah tipenya adalah Array atau bukan:

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 Januari 2022, 15:21

Gunakan map() untuk mendapatkan nama panggilan saja, lalu gunakan flat() untuk meratakan larik.

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 Januari 2022, 15:29

Anda dapat membuat loop rekursif kecil, dengan memanggil fungsi total_nicknames lagi, jika student.nickname adalah array. Anda juga perlu menggunakan operator || (ATAU), untuk mendapatkan nama panggilan (yang akan berupa string, jika loop di atas array) dan bukan undefined (karena objek string tidak memiliki nama panggilan metode/properti).

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 Januari 2022, 15:39

Solusi sederhana berdasarkan rekursi.

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 Januari 2022, 15:37