Angular 2 및 TypeScript로 두 개의 객체 배열을 병합 하시겠습니까?


92

이 주제에 대한 JavaScript 질문을 살펴 보았습니다.이 질문은 특히 TypeScript를 사용하는 Angular2에 관한 것입니다.

내가하려는 것은 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);
            }
        );
}

typescript 및 angular data.results로 어떻게 연결할 수 this.results있습니까?

this._slugthis._next클래스에 설정됩니다.

감사.

답변:


123

차라리 다음을 사용해야한다고 생각합니다.

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

로부터 concat 문서 :

concat () 메서드는 인수로 제공된 배열 및 / 또는 값과 결합 된 호출 된 배열로 구성된 새 배열을 반환합니다.


1
불행하게도, 그 :( Uint8arrays하지 작업을 수행합니다
프레드릭 노르

this.results가 null이거나 정의되지 않은 경우 실패 할 수 있음
Michael Freidgeim


35

각도 6 확산 연산자연결 이 작동하지 않습니다. 쉽게 해결할 수 있습니다.

result.push(...data);

메서드 간의 개체 참조를 유지하면서 솔루션을 찾고 왔습니다. 이것은 완벽하게 작동했습니다. 감사합니다
jgritten 19-12-06

이것은 배열을 병합하지 않고 두 번째의 데이터를 첫 번째에 추가합니다. 작업을 수행 할 수 있지만 원래 배열을 수정하므로주의해야합니다.
Davor

5

ES6에서 권장하는 양식을 사용할 수도 있습니다.

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

이것은 배열을 먼저 초기화하면 작동합니다 ( public results = [];); 그렇지 않으면 교체 ...this.results,에 의해 ...this.results ? this.results : [],.

도움이 되었기를 바랍니다


2

이 시도

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

0

두 개의 배열이 있다고 가정합니다. 첫 번째에는 학생 세부 정보가 있고 학생은 세부 정보를 표시합니다. 두 배열 모두 'studentId'라는 공통 키가 있습니다.

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}
]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.