Tengo una matriz con información personal como nombres y edades. Quiero combinar algunas de esas propiedades para crear una nueva propiedad para cada elemento de la matriz.
De esta matriz:
var list = [{name: "James", lastName: "M.", age: 58}, {name: "Rachel", lastName: "W.", age: 51}];He creado una nueva entrada con:
list.forEach(function(itm){ itm.username = {...list.firstName, ...list.last}; }); Quiero combinar list.firstName con list.lastName para crear list.username . list.username consistiría en una concatenación de list.firstName y list.lastName .
Intenté usar el operador .assign() sin éxito, solo da como resultado TypeError: Cannot read property '0' of undefined . Por alguna razón, recibo el mismo mensaje de error cuando intento simplemente ver las propiedades de la matriz individual a través console.log(list.firstName[0]); .
Supongo que esto es javascript (basado en la etiqueta de la pregunta). En cuyo caso, el código que intenta ejecutar parece incorrecto.
var list = [{firstName: "James", lastName: "M.", age: 58}, {firstName: "Rachel", lastName: "W.", age: 51}]; list.forEach((entry) => { entry.fullName = entry.firstName + " " + entry.lastName; }); console.log(list[0].fullName);En esta solución, simplemente estoy recorriendo todos los elementos de la matriz y asignando una nueva propiedad "fullName" con los valores de la propiedad del elemento.
Hay varias formas de hacerlo, esta es solo la forma más sencilla de aclarar su comprensión.
console.log(list[0].firstName); Tenga en cuenta que el descriptor de acceso del índice de la matriz se encuentra después de la list de nombres de la matriz y no después del nombre del atributo/propiedad firstName en este caso.
Además, en su código proporcionado no hay un atributo firstName , por lo tanto, tenga algunos controles en su lugar; de lo contrario, usará un valor undefined y podría arrojar algún error según su entorno de desarrollo.
También debe pensar en cómo se comportarán los datos de la matriz si cambia el valor de los atributos/propiedades.
Por ejemplo, si cambia el atributo/propiedad firstName , entonces debe recordar actualizar también el atributo/propiedad fullName , de lo contrario, no estarán sincronizados.
La forma más eficiente de realizar esta tarea es tener el atributo/propiedad como un atributo/propiedad computado (piense en funciones o captadores más precisos)
var list = [{ firstName: "James", lastName: "M.", age: 58, get fullName() { return this.firstName + " " + this.lastName; }, }, { firstName: "Rachel", lastName: "W.", age: 51, get fullName() { return this.firstName + " " + this.lastName; }, }]; console.log(list[0].fullName);Puede obtener más información sobre getters y setters en JavaScript Accessors (Getters and Setters)
Veo dos errores en tu código.
La clave para el nombre es 'nombre' en su lista de objetos y ha estado intentando usar 'nombre' mientras concatena.
Ha estado tratando de fusionar las propiedades de los objetos en el bucle for, donde necesita fusionar los valores.
Aquí está la solución:
var list = [{firstName: "James", lastName: "M.", age: 58}, {firstName: "Rachel", lastName: "W.", age: 51}]; list.forEach(function(itm){ itm.username = itm.firstName + " " + itm.lastName; }); console.log(list)Dado que los objetos están en la lista, deberá proporcionar un índice para acceder al objeto y sus valores.
Ejemplos:
console.log(list[0].username)O para obtener solo la lista de nombres de usuario, puede usar:
userNames = list.map(function(obj) { return obj.username; }); console.log(userNames)Bueno, no hay una propiedad llamada list.firstName , creo que te refieres a list.name .
La solución es crear un nuevo objeto llamado list.username y combinar list.name y list.lastName y, dado que está dentro de la función forEach , list se llamará itm . Por lo tanto, será itm.name e itm.lastName .
También he añadido + " " + para crear un espacio entre el primer nombre y el segundo nombre.
var list = [{name: "James", lastName: "M.", age: 58}, {name: "Rachel", lastName: "W.", age: 51}]; list.forEach(function(itm) { list.username = itm.name + " " + itm.lastName; console.log(list.username); /** James M. Rachel W. **/ }); Además de que no hay una propiedad llamada list.firstName , no puede acceder a list.firstName , intente acceder a otra también.
var list = [{name: "James", lastName: "M.", age: 58}, {name: "Rachel", lastName: "W.", age: 51}]; console.log(list[0].name); // James