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
5 jawaban
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();
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);
}
});
}
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())
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);
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"