【问题标题】:Iterate over an array of one type and copy only specific items in another array of another type遍历一种类型的数组并仅复制另一种类型的另一个数组中的特定项
【发布时间】:2020-06-15 20:36:53
【问题描述】:

在打字稿中,我有两个数组:

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 并将所有名称设置为 mySecondArray 中的 nickNames? 比如:

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

【问题讨论】:

  • 我不确定你在这里想要什么。预期的输出是什么?

标签: arrays angular typescript


【解决方案1】:

如果您只想分配nickname,那么您需要在ISecond 接口中将lastname 设为可选,例如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);

Working code in Stackblitz...(看看控制台)..

【讨论】:

    【解决方案2】:

    这里有mySecondArray 的类型为数组ISecond。因此,无论何时要在其中分配值,都应该分配对象的两个属性。

    如下 -

    this.myFirstArray.map((element: IFirst) => {
      this.mySecondArray.push({nickName = element.name, lastName: ''});
    })
    

    【讨论】:

    • 好的,谢谢,我明白了。这只是我不关注这个问题,所以我忘了写它,
    • 它与Maniraj Muruganporgo 答案结合使用
    • 那真是太棒了。
    【解决方案3】:

    你可以使用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);
    

    【讨论】:

      【解决方案4】:

      你应该初始化第二个数组:

      mySecondArray: ISecond[] = [];
      

      然后推送元素:

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

      【讨论】:

      • 谢谢,就是这样。虽然我用的是地图
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多