Перебирать массив одного типа и копировать только указанные c элементы в другой массив другого типа - PullRequest
2 голосов
/ 03 марта 2020

В машинописном тексте у меня есть два массива:

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}
]

Как я могу перебрать myFirstArray и установить для всех имен nickNames в mySecondArray? Что-то вроде:

this.myFirstArray.forEach((element: IFirst) => {
        this.mySecondArray.push({nickName = element.name});
      })

Ответы [ 4 ]

3 голосов
/ 03 марта 2020

Если вы хотите назначить только nickname, то вам нужно сделать фамилию необязательной в ISecond интерфейсе, например lastName?: string, и интерфейс будет

interface ISecond {
  nickName: string;
  lastName?: string;
}

Вы можете использовать this.myFirstArray.map () метод и присваивают значение псевдонима как myFirstArray имя элемента для this.mySecondArray как,

this.mySecondArray = this.myFirstArray.map((element: IFirst) => {
  return { nickName: element.name };
});

console.log("this.mySecondArray ", this.mySecondArray);

Рабочий код в Stackblitz ... (посмотрите на консоль) ..

1 голос
/ 03 марта 2020

Здесь у вас есть mySecondArray типа массив ISecond. Поэтому, когда вы хотите присвоить ему значения, вы должны назначить оба свойства объекта.

Как показано ниже -

this.myFirstArray.map((element: IFirst) => {
  this.mySecondArray.push({nickName = element.name, lastName: ''});
})
1 голос
/ 03 марта 2020

Вы можете использовать map метод:

this.myFirstArray = [
    {name: 'tim', age: 20},
    {name: 'jim', age: 30}
];
this.mySecondArray = this.myFirstArray.map(({name, age})=> <ISecond><any>{ 
    nickname: name,
    lastName: ''
    });
console.log(this.mySecondArray);
1 голос
/ 03 марта 2020

Вы должны инициализировать второй массив:

mySecondArray: ISecond[] = [];

и затем элементы pu sh:

this.myFirstArray.forEach((element: IFirst) => {
    this.mySecondArray.push({nickName: element.name, lastName: ''});
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...