【问题标题】:merge two object arrays with Angular 2 and TypeScript?用 Angular 2 和 TypeScript 合并两个对象数组?
【发布时间】:2016-10-31 17:45:44
【问题描述】:

我已经浏览过关于这个主题的 JavaScript 问题,这个问题专门关于 Angular2 和 TypeScript。

我想要做的是将 json 对象连接到一个数组。

我的代码看起来像这样,

public results: [];


public getResults(){
    this._service.get_search_results(this._slug, this._next).subscribe(
            data => {
                this.results.concat(data.results);
                this._next = data.next;
            },
            err => {
                console.log(err);
            }
        );
}

如何将data.resultsthis.results 与打字稿和角度连接起来?

this._slugthis._next 在类中设置。

谢谢。

【问题讨论】:

    标签: arrays typescript angular


    【解决方案1】:

    扩展运算符有点酷。

    this.results = [ ...this.results, ...data.results];
    

    扩展运算符允许您轻松地将扩展版本的数组放入另一个数组中。

    You can read about spread operator here.

    【讨论】:

      【解决方案2】:

      我认为您应该使用以下内容:

      data => {
        this.results = this.results.concat(data.results);
        this._next = data.next;
      },
      

      来自concatdoc

      concat() 方法返回一个新数组,该数组由调用它的数组与作为参数提供的数组和/或值连接。

      【讨论】:

      • 不幸的是,这不适用于 Uint8arrays :(
      • 如果 this.results 为空或未定义可能会失败
      【解决方案3】:

      使用 angular 6 spread operatorconcat 不起作用。你可以轻松解决:

      result.push(...data);
      

      【讨论】:

      • 来到这里寻找解决方案,同时保持方法之间的对象引用。这工作得很好。谢谢
      • 这不会合并数组,它会将数据从第二个添加到第一个。虽然它可以完成这项工作,但需要小心,因为它会修改原始数组。
      • 完美解决方案!
      【解决方案4】:

      也可以使用 ES6 推荐的形式:

      data => {
        this.results = [
          ...this.results,
          data.results,
        ];
        this._next = data.next;
      },
      

      如果你先初始化你的数组,这会起作用 (public results = [];);否则将...this.results, 替换为...this.results ? this.results : [],

      希望对你有帮助

      【讨论】:

        【解决方案5】:

        假设我有两个数组。第一个有学生详细信息和 学生分数详情。两个数组都有共同的键,即 ‘学生证’

        let studentDetails = [
          { studentId: 1, studentName: 'Sathish', gender: 'Male', age: 15 },
          { studentId: 2, studentName: 'kumar', gender: 'Male', age: 16 },
          { studentId: 3, studentName: 'Roja', gender: 'Female', age: 15 },
          {studentId: 4, studentName: 'Nayanthara', gender: 'Female', age: 16},
        ];
        
        let studentMark = [
          { studentId: 1, mark1: 80, mark2: 90, mark3: 100 },
          { studentId: 2, mark1: 80, mark2: 90, mark3: 100 },
          { studentId: 3, mark1: 80, mark2: 90, mark3: 100 },
          { studentId: 4, mark1: 80, mark2: 90, mark3: 100 },
        ];
        

        我想根据键“studentId”合并两个数组。我有 创建了一个函数来合并两个数组。

        const mergeById = (array1, array2) =>
            array1.map(itm => ({
              ...array2.find((item) => (item.studentId === itm.studentId) && item),
              ...itm
            }));
        

        这是得到最终结果的代码

        let result = mergeById(studentDetails, studentMark);

        [
        {"studentId":1,"mark1":80,"mark2":90,"mark3":100,"studentName":"Sathish","gender":"Male","age":15},{"studentId":2,"mark1":80,"mark2":90,"mark3":100,"studentName":"kumar","gender":"Male","age":16},{"studentId":3,"mark1":80,"mark2":90,"mark3":100,"studentName":"Roja","gender":"Female","age":15},{"studentId":4,"mark1":80,"mark2":90,"mark3":100,"studentName":"Nayanthara","gender":"Female","age":16}
        ]
        

        【讨论】:

          【解决方案6】:

          试试这个

          data => {
              this.results = [...this.results, ...data.results];
              this._next = data.next;
          }
          

          【讨论】:

            猜你喜欢
            • 2018-09-21
            • 2011-11-01
            • 2021-03-08
            • 2020-05-20
            • 2019-12-02
            • 1970-01-01
            • 1970-01-01
            • 2020-02-04
            • 2015-01-26
            相关资源
            最近更新 更多