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

'다음' 및 '이전' 속성으로 정렬(JS 비교기 기능)

<시간/>

다음은 객체의 샘플 배열입니다. 각 객체는 다중 페이지 웹사이트의 일부 페이지를 나타내는 것으로 간주합니다. 각 객체는 다른 객체의 ID를 가리키는 다음 속성(마지막 페이지를 나타내지 않는 한)과 이전 속성(첫 번째를 나타내지 않는 한 페이지) 이전 개체의 일부 ID를 가리킵니다.

이 개체들은 지금 모두 무작위로 배치되어 있습니다. 우리의 임무는 그것들을 올바른 위치로 정렬하는 것입니다 -

arr =[ { 아이디:"1325asdfasdasd", 다음:"5345341fgdfgdd", 이전:"545234123fsdfd" }, { 아이디:"das987as9dya8s", 다음:"8j12k3b1231", "jjbid3b12k3jbasdd" }, { 아이디:"5345341fgdfgdd", 다음:"1j3b12k3jbasdd", 이전:"1325asdfasdasd" }, {jddfasdasd" }, {jddfasdasd" }, { 아이디:"1423123123asfd", 다음:"5432" ",", 다음:"89ad8sasds9d8s", 이전:"5345341fgdfgdd" }, { id:"3j12k3b1231jkj", 다음:"1423123123asfd", 이전:"das987as9dya8s" 52asid:253asfd "1423123123asfd" },];

이전 항목이 없는 개체가 먼저 오고 다음 항목이 없는 개체가 마지막에 오도록 정렬해야 하며 다음 및 이전 항목이 올바른 ID를 가리키도록 해야 합니다.

우리는 이 문제를 두 단계로 다룰 것입니다 -

1단계 − 전체 배열을 반복하고 id를 키로 저장하고 객체를 값으로 맵에 저장하고 이전 항목이 없는 객체를 별도의 변수에 저장합니다. −

const objectMap =new Map();let firstObject;const sortedArray =[];for(const obj of arr){ objectMap.set(obj.id, obj); if(!obj.previous){ firstObject =obj; }}

2단계 − map의 요소에 대해 루프를 시작하고 끝에 도달하는 동안 각 구성원의 다음 개체에 액세스하고 푸시하기 시작합니다. −

for(시작 =firstObject; 시작, 시작 =objectMap.get(start.next)){ sortedArray.push(start);};console.log(sortedArray);

이제 출력이 포함된 전체 예를 살펴보겠습니다 −

예시

arr =[ { 아이디:"1325asdfasdasd", 다음:"5345341fgdfgdd", 이전:"545234123fsdfd" }, { 아이디:"das987as9dya8s", 다음:"8j12k3b1231", "jjbid3b12k3jbasdd" }, { 아이디:"5345341fgdfgdd", 다음:"1j3b12k3jbasdd", 이전:"1325asdfasdasd" }, {jddfasdasd" }, {jddfasdasd" }, { 아이디:"1423123123asfd", 다음:"5432" ",", 다음:"89ad8sasds9d8s", 이전:"5345341fgdfgdd" }, { id:"3j12k3b1231jkj", 다음:"1423123123asfd", 이전:"das987as9dya8s" 52asid:253asfd "1423123123asfd"},]; const objectMap =new Map(); let firstObject; const sortedArray =[];for(arr의 const obj){ objectMap.set(obj.id, obj); if(!obj.previous){ firstObject =obj; }}for(시작 =firstObject; 시작; 시작 =objectMap.get(start.next)){ sortedArray.push(start);};console.log(sortedArray);

출력

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

[ { 아이디:'das987as9dya8s', 다음:'3j12k3b1231jkj' }, { 아이디:'3j12k3b1231jkj', 다음:'1423123123asfd', 3fd3123123asfd', 이전:'dya887':3 , 이전:'3j12k3b1231jkj'},{ id:'545234123fsdfd', 다음:'1325asdfasdasd', 이전:'1423123123asfd'},{ id:'1325asdfasdas :'5345341fgdfgdd', 다음:'1j3b12k3jbasdd', 이전:'1325asdfasdasd'},{ id:'1j3b12k3jbasdd', 다음:'89ad8sasds9d8s', 이전:'15345 }]