Я считаю, что это квадратичный O (n ^ 2), но не уверен на 100% из-за неопределенности того, как операции .filter()
и .map()
работают в JavaScript.
Большой вопрос, который у меня возникает, заключается в том, завершается ли вся операция filter()
перед началом одной операции map()
, или она достаточно умна для выполнения операции map()
, когда она уже повторяется в операции filter()
.
Способ
function subscribedListsFromSubscriptions(subscriptions: Subscription[]) {
return new Set(listSubscriptions.filter((list) => {
return list.subscribed;
}).map((list) => {
return list.list_id;
}));
}
Пример входных данных
let subscriptions = [ {
list_id: 'abc',
subscribed: false
}, {
list_id: 'ghi',
subscribed: false
}];
Из того, что я вижу
Похоже, что:
filter()
для каждого элемента subscriptions
- время n
map()
для каждого оставшегося элемента - время n
(максимум)
new Set()
для каждого оставшегося элемента - время n
(максимум)
Для операции new Set()
я предполагаю, что она создает новый объект и добавляет каждый элемент в созданный экземпляр.
Если в данных было много дубликатов, можно ожидать повышения эффективности. Но мы не ожидаем много дубликатов в данных, и из моего понимания «Big O» максимальный предел - это то, что используется.
Из этого анализа я ожидаю, что временная сложность будет либо O(n^2)
, либо O(n^3)
. Но, как уже говорилось, я не уверен, как это интерпретировать наверняка.
Любая помощь в этом будет принята с благодарностью. Заранее спасибо!