angular - Iterar sobre un arreglo de un tipo y copiar solo elementos específicos en otro arreglo de otro tipo
En TypeScript, tengo dos arrays:
interface IFirst{
name: string;
age: number
}
interface ISecond {
nickName: string;
lastName: string;
}
myFirstArray: IFirst[];
mySecondArray: ISecond[];
myFirstArray = [
{name: 'tim', age: 20},
{name: 'jim', age: 30}
]
¿Cómo puedo iterar a través de myFirstArray y establecer todos los nombres en nickNames en mySecondArray? Algo como:
this.myFirstArray.forEach((element: IFirst) => {
this.mySecondArray.push({nickName = element.name});
})
Respuesta #1
Si quieres asignar solo nickname, entonces necesitas hacer que lastname sea opcional en la interfaz ISecond como lastName?: string y la interfaz será,
interface ISecond {
nickName: string;
lastName?: string;
}
Puedes usar el método this.myFirstArray.map() y asignar el valor del apodo como el nombre del elemento de myFirstArray a this.mySecondArray así,
this.mySecondArray = this.myFirstArray.map((element: IFirst) => {
return { nickName: element.name };
});
console.log("this.mySecondArray ", this.mySecondArray);
Código funcionando en Stackblitz... (Échale un vistazo a la consola)..
Respuesta #2
Aquí tienes mySecondArray que es de tipo array ISecond. Así que cada vez que quieras asignar valores en él, deberías asignar ambas propiedades del objeto.
Como abajo -
this.myFirstArray.map((element: IFirst) => {
this.mySecondArray.push({nickName = element.name, lastName: ''});
})
