공개 해결: 연결 목록과 기차
12897 단어 javascript
그러나 이 열차는 혹독한 날씨로 인해 상당한 유지 보수가 필요합니다.
이 퍼즐의 경우 기차 구성을 파악하고 이 구성에 특정 필터와 작업을 추가해야 합니다.
You can find the puzzle here.
입력으로 연결 목록 기차 개체를 얻습니다.
연결 목록은 기본적으로 다음 요소에 연결되는
next
속성이 있는 개체를 의미합니다.예를 들어:
export const locomotive = {
name: 'L-283',
emoji: '🚂',
isLocomotive: true,
next: wagon1,
}
const wagon1 = {
name: 'W-10582',
emoji: '🚋',
lastBreakRevision: '2021-02-15',
next: wagon2,
}
보시다시피 기관차는 다음으로
wagon1
를 가지고 있고 그 대가로 wagon2
를 가지고 있으므로 기관차에 액세스하여 전체 기차를 합성할 수 있습니다.솔루션에 대한 생각
다음 세 가지 작업이 필요합니다.
다음 부트스트랩 기능으로 시작합니다.
const defaultFilterFn = () => true
const defaultActionFn = wagon => console.log(`${wagon.emoji} ${wagon.name}`)
export const iterateWagons = (start, actionFn, filterFn) => {}
export const filterOldBreaks = wagon => {
return true
}
iterate wagons 기능과 filter old breaks 기능을 채워야 합니다.
여기서 주요 과제는 마차를 기차의 다음 각 요소를 따라가는 기차 배열로 변환하는 것입니다.
그런 다음 방금 만든 이 배열을 필터링하고 반복하기 위해 배열 메서드를 사용해야 합니다.
Note: It's been a while since I worked with Linked lists, so I'm pretty sure there are alternative ways of doing this assignment.
JavaScript에서 연결된 목록 기차 만들기
시작 개체를
next
순서를 따르는 배열로 변환해 보겠습니다.while
속성이 비어 있을 때까지 보기 위해 next
루프를 사용하기로 결정했습니다.const train = [start];
while (start.next !== null) {
start = start.next;
train.push(start);
}
이것은 기관차로 시작하여 기차를 배열로 설정합니다.
그런 다음, while 루프는 시작 변수를 다음 요소로 변경하고 이를 기차 배열로 푸시합니다.
여전히 비어 있지 않으므로 while 루프를 다시 실행합니다.
이제 이
train
배열에 마차의 전체 목록이 순서대로 있습니다!할당의 다음 부분은 각 마차에 특정 필터 기준을 추가할 수 있도록 하는 것입니다.
이러한 기준 중 일부는 다음과 같을 수 있습니다.
filter
method 을 사용할 수 있습니다.그러나 필터가 지정되지 않은 경우 기본 필터를 사용해야 합니다. 매개변수에서 이것을 기본값으로 설정할 수 있습니다.
export const iterateWagons = (
start,
actionFn,
filterFn = defaultFilterFn
) => {
const train = [start];
while (start.next !== null) {
start = start.next;
train.push(start);
}
return train
.filter((wagon) => filterFn(wagon));
};
그러면 제공된 필터와 일치하는 기차 요소만 반환되며 기본값은 모두 기본값입니다.
이 기능에 대해 남은 마지막 부분은 작업입니다.
우리는 마차마다 어떤 일이 일어나야 하는 조치를 전달해야 합니다.
필터와 동일한 접근 방식을 사용할 수 있지만
forEach
method 을 활용합니다.export const iterateWagons = (
start,
actionFn = defaultActionFn,
filterFn = defaultFilterFn
) => {
const train = [start];
while (start.next !== null) {
start = start.next;
train.push(start);
}
return train
.filter((wagon) => filterFn(wagon))
.forEach((wagon) => actionFn(wagon));
};
이제 우리가 해야 할 일은 오래된 휴식 시간에 대한 필터를 만드는 것뿐입니다.
고장난 시스템은 오늘부터 최소 1년 동안 서비스되지 않으면 오래된 것입니다.
Note: again multiple ways to do this.
가장 먼저 주목해야 할 점은 마차에는 휴식 시간에 대해 다음과 같은 날짜 표기가 있다는 것입니다.
lastBreakRevision: '2021-02-15',
새 날짜 변수를 설정하고 여기서 연도를 빼서 시작하겠습니다.
new Date(new Date().setFullYear(new Date().getFullYear() - 1))
// When running this on 10 December 2021 we get:
// 2020-12-10T05:10:51.846Z
거의 다 왔으니
T05:10:51.846Z
부분만 제거하면 됩니다.이 작업을 수행하기 위해
T
에서 분할하고 첫 번째 부분만 반환할 계획입니다.이것은 이제 날짜 개체이기 때문에 작동하지 않으며 문자열이어야 합니다.
그것이
.toISOString()
가 작동하는 곳입니다.export const filterOldBreaks = (wagon) => {
return (
new Date(new Date().setFullYear(new Date().getFullYear() - 1))
.toISOString()
.split('T')[0] > wagon.lastBreakRevision
);
};
그리고 완전한 중단 확인 기능이 있습니다!
테스트를 실행하고 우리가 어떻게 했는지 봅시다:
다른 사람들이 이 퍼즐을 어떻게 풀었는지 정말 궁금합니다. 알려주세요 👏
읽어주셔서 감사합니다. 연결해 보겠습니다!
제 블로그를 읽어주셔서 감사합니다. 내 이메일 뉴스레터를 구독하고 Facebook 또는
Reference
이 문제에 관하여(공개 해결: 연결 목록과 기차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dailydevtips1/public-solving-linked-list-and-a-train-4b44텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)