編寫一個返回某個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或未定義。
有什麼建議嗎?
eslint錯誤:'迭代器/發電機需要蓄冷器運行時,這也太重量級本指南,使他們。另外,應該避免使用循環來支持數組迭代no-restricted-syntax' – user2456977
+ eslint:由於活動和名稱未被重新分配,因此更改開銷。然後我添加另一個變量,而不是重複使用物品..然後得到錯誤 – user2456977
以上所以必須有一個轉譯參與?什麼「指南」不允許他們,爲什麼?使用轉譯器的關鍵是現在能夠使用有用的新語法功能,而不是爲了避免它們。 「無限制語法」配置表達的意見遠非絕對。我將在一週中的任何一天使用'for for'數組迭代方法。我想我可以重寫這個使用'.reduce()',但我沒有看到任何收益。 – llama