Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

두 가지 속성으로 배열의 값 그룹화 JavaScript

<시간/>

다음과 같은 객체 배열이 있습니다 -

상수 arr =[ { 값:12, 간격:1 }, { 값:13, 간격:1 }, { 값:14, 간격:1 }, { 값:15, 간격:1 }, { 값:19, 간격:2 }, { 값:21, 간격:1 }, { 값:22, 간격:1 }, { 값:23, 간격:1 }, { 값:27, 간격:1 }, { 값:31, 간격:4 }, { 값:35, 간격:4 }, { 값:39, 간격:4 }, { 값:43, 간격:1 }, { 값:50, 간격:1 }, { 값:51, 간격:1 }, { 값:52, 간격:1 }, { 값:55, 간격:1 }, { 값:57, 간격:1 },];

이 배열을 받아 값이 이전 개체의 값과 gap의 합과 같은 모든 연속 개체가 하위 배열로 함께 그룹화되어야 하는 새 배열을 반환하는 함수를 작성해야 합니다.

예를 들어 − 값이 12인 개체는 간격이 1이고 다음 개체의 값이 13이므로 그룹화해야 하며 값이 14 및 15인 개체와 같이 그룹화해야 합니다.

이제 문제를 이해했으면 이 문제에 대한 코드를 작성해 보겠습니다. 원하는 배열을 구성하기 위해 Array.prototype.reduce() 메서드를 사용할 것입니다 -

예시

상수 arr =[ { 값:12, 간격:1 }, { 값:13, 간격:1 }, { 값:14, 간격:1 }, { 값:15, 간격:1 }, { 값:19, 간격:2 }, { 값:21, 간격:1 }, { 값:22, 간격:1 }, { 값:23, 간격:1 }, { 값:27, 간격:1 }, { 값:31, 간격:4 }, { 값:35, 간격:4 }, { 값:39, 간격:4 }, { 값:43, 간격:1 }, { 값:50, 간격:1 }, { 값:51, 간격:1 }, { 값:52, 간격:1 }, { 값:55, 간격:1 }, { 값:57, 간격:1 },];const groupArray =arr => { return arr.reduce ((acc, val, ind, array) => { // 누적 데이터와 누적 데이터의 lastIndex const { data, currentIndex } =acc; // 현재 객체 속성 const { value, gap } =val; // 이전 객체 속성 const v =arr[ind-1]?.value; const g =arr[ind-1]?.gap; if(ind ===0 || value !==v + g){ // 기록 마지막 개체의 인덱스 및 새 하위 배열 푸시 const index =data.push([val]) - 1; return { dat a, 현재 인덱스:인덱스 }; }; 데이터[현재 인덱스].푸시(발); { 데이터, 현재 인덱스 }를 반환합니다. }, { 데이터:[], 현재 인덱스:0 }).data;}console.log(그룹배열(arr));

출력

콘솔의 출력은 다음과 같습니다. -

[ [ { 값:12, 간격:1 }, { 값:13, 간격:1 }, { 값:14, 간격:1 }, { 값:15, 간격:1 } ], [ { 값:19, 간격:2 }, { 값:21, 간격:1 }, { 값:22, 간격:1 }, { 값:23, 간격:1 } ], [ { 값:27, 간격:1} ], [ { 값:31, 간격:4 }, { 값:35, 간격:4 }, { 값:39, 간격:4 }, { 값:43, 간격:1 } ], [ { 값:50, 간격:1 }, { 값:51, 간격:1 }, { 값:52, 간격:1 } ], [ { 값:55, 간격:1} ], [ { 값:57, 간격:1} ]]