使用Angular 2和TypeScript合并两个对象数组?

Riv*_*diz 72 arrays typescript angular

我已经浏览了关于这个主题的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);
            }
        );
}
Run Code Online (Sandbox Code Playgroud)

我怎么可以连接data.resultsthis.results与打字稿和角?

this._slugthis._next在课堂上设置.

谢谢.

Ams*_*nna 119

价差操作是有点儿凉.

this.results = [ ...this.results, ...data.results];
Run Code Online (Sandbox Code Playgroud)

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

你可以在这里阅读传播运营商.


Thi*_*ier 99

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

data => {
  this.results = this.results.concat(data.results);
  this._next = data.next;
},
Run Code Online (Sandbox Code Playgroud)

来自concat doc:

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


小智 22

使用角度6 扩展操作符concat不起作用.您可以轻松解决:

result.push(...data);
Run Code Online (Sandbox Code Playgroud)

  • 这不会合并数组,而是将第二个数组中的数据添加到第一个数组中。虽然它可以完成这项工作,但需要小心,因为它会修改原始数组。 (2认同)

小智 10

\n

假设我有两个数组。第一个包含学生详细信息和\n学生分数详细信息。两个数组都有共同的密钥,即\n\xe2\x80\x98studentId\xe2\x80\x99

\n
\n
let studentDetails = [\n  { studentId: 1, studentName: 'Sathish', gender: 'Male', age: 15 },\n  { studentId: 2, studentName: 'kumar', gender: 'Male', age: 16 },\n  { studentId: 3, studentName: 'Roja', gender: 'Female', age: 15 },\n  {studentId: 4, studentName: 'Nayanthara', gender: 'Female', age: 16},\n];\n\nlet studentMark = [\n  { studentId: 1, mark1: 80, mark2: 90, mark3: 100 },\n  { studentId: 2, mark1: 80, mark2: 90, mark3: 100 },\n  { studentId: 3, mark1: 80, mark2: 90, mark3: 100 },\n  { studentId: 4, mark1: 80, mark2: 90, mark3: 100 },\n];\n
Run Code Online (Sandbox Code Playgroud)\n
\n

我想根据键 \xe2\x80\x98studentId\xe2\x80\x99 合并两个数组。我创建了一个函数来合并两个数组。

\n
\n
const mergeById = (array1, array2) =>\n    array1.map(itm => ({\n      ...array2.find((item) => (item.studentId === itm.studentId) && item),\n      ...itm\n    }));\n
Run Code Online (Sandbox Code Playgroud)\n
\n

这是获得最终结果的代码

\n
\n

let result = mergeById(studentDetails, studentMark);

\n
[\n{"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}\n]\n
Run Code Online (Sandbox Code Playgroud)\n


小智 6

尝试这个

data => {
    this.results = [...this.results, ...data.results];
    this._next = data.next;
}
Run Code Online (Sandbox Code Playgroud)


Bab*_*bak 5

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

data => {
  this.results = [
    ...this.results,
    data.results,
  ];
  this._next = data.next;
},
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助