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

이 주제에 대한 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클래스에 설정됩니다.

감사.



답변

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

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

로부터 concat 문서 :

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


답변

확산 운영자는 좀 냉각된다.

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

확산 연산자를 사용하면 확장 된 버전의 배열을 다른 배열에 쉽게 배치 할 수 있습니다.

여기에서 스프레드 연산자에 대해 읽을 수 있습니다.


답변

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

result.push(...data);


답변

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

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

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

도움이 되었기를 바랍니다


답변

이 시도

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


답변

두 개의 배열이 있다고 가정합니다. 첫 번째에는 학생 세부 정보가 있고 학생은 세부 정보를 표시합니다. 두 배열 모두 ‘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}
]


답변