특정 activity
의 name
을 반환하는 알고리즘을 작성합니다. 우리의 기능에서전역 변수를 사용하지 않는 재귀 알고리즘의 반환 값
우리는 activity
의 가치를 제공하고, 우리의 배열에 존재하는 경우 name
의 값이 반환됩니다
예 :
findMatch('scuba diving', activityItems) = 'Beach'
const activityItems = [
{
name: 'Sunday',
items: [
{
name: 'Gym',
activity: 'weights',
},
],
},
{
name: 'Monday',
items: [
{
name: 'Track',
activity: 'race',
},
{
name: 'Work',
activity: 'meeting',
},
{
name: 'Swim',
items: [
{
name: 'Beach',
activity: 'scuba diving',
},
{
name: 'Pool',
activity: 'back stroke',
},
],
},
],
},
{} ...
{} ...
];
내 구현 :
let match = '';
const findMatch = (activity, activityItems) => {
for (let i = 0; i < activityItems.length; i += 1) {
if (activityItems[i].activity === activity) {
match = activityItems[i].name;
return match;
}
if (activityItems[i].items && findMatch(activity, activityItems[i].items)) {
return match;
}
}
return false;
};
을
그러나 전역 변수를 사용하기 때문에 구현이 마음에 들지 않습니다. 그것없이 올바른 값을 반환 할 수있는 방법이 있습니까?
내가 좋아하는 일을 시도 :const findMatch = (activity, activityItems) => {
for (let i = 0; i < activityItems.length; i += 1) {
if (activityItems[i].activity === activity) {
return activityItems[i].name;
}
if (activityItems[i].items) {
return findMatch(activity, activityItems[i].items);
}
}
return false;
};
그러나 이것은 항상 false 또는 undefined를 반환합니다.
제안 사항?
eslint 오류 :'반복자는/발전기는이 가이드를 할 수 있도록 너무 헤비급 재생기-런타임을 필요로합니다. 별도로 루프는 배열 반복을 피하기 위해 금지되어야합니다. 구문은 – user2456977
+ eslint : 활동 및 이름이 다시 할당되지 않기 때문에 비용을 변경하십시오. 그런 다음 항목을 재사용하는 대신 다른 변수를 추가하십시오 .. – user2456977
위의 오류가 발생합니다. 따라서 변환기가 관련되어 있어야합니까? "가이드"가 그들을 허용하지 않는 이유와 그 이유는 무엇입니까? transpiler 사용의 요점은 유용하고 새로운 구문 기능을 피할 수있게 사용하는 것입니다. '제한없는 구문 (no-restricted-syntax)'구성은 절대적인 것과는 거리가 먼 의견을 표현합니다. 배열 반복 (iteration) 메서드에 대해 for of를 사용할 것입니다. 나는'.reduce()'를 사용하기 위해 이것을 다시 쓸 수 있다고 생각하지만 거기에는 이득이 없다. – llama