No estoy seguro de cómo analizar una lista de cadenas dentro de un bucle con respecto a este diccionario.
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); }); }Producción
Bill Joe Mary [ 'Rick', 'Ricky' ] [ 'Liz', 'Lisa', 'Beth' ]Salida deseada
Bill Joe Mary Rick Ricky Liz Lisa BethTodo lo que necesita hacer es tener una condición if para verificar si la propiedad de apodo de cada estudiante es una matriz o no, si es una matriz, puede recorrerla e imprimir cada elemento individualmente, de lo contrario, siga su lógica.
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();una solución simple basada en la recursividad.
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"Puede crear un pequeño bucle recursivo llamando de nuevo a la función total_nicknames , si student.nickname es una matriz. También necesita usar || (OR), para obtener el apodo (que sería una cadena, si recorre la matriz) y no undefined (ya que el objeto de cadena no tiene ningún método/propiedad de apodo).
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);