Búsqueda de sitios web

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

Artículos relacionados