この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - JavaScript コーディング問題
18. あるfunctionを改善する
excludeItems()
は、与えられたitems
の中から、excludes
で指定された条件にマッチするものを除外して、残ったアイテムの配列を返す関数です。- 予想通りに動いているとは限りません。現在の実装では、
excludes
に含まれる条件を順番に適用してフィルタリングしているため、最後の条件しか適用されない可能性があります。また、excludes
に含まれるすべての条件が一致するものがない場合、結果は空配列になります。 - 上記の実装の時間複雑性は、
excludes
に含まれる条件の数に比例します。filter()
が呼び出されるたびに、items
の要素をすべてチェックするため、O(N^2)
の時間複雑性があります。 - 以下は改善した実装です。この実装では、
excludes
に含まれる条件を同時にチェックすることで、一度のループでフィルタリングを行います。また、フィルタリングの結果が空の場合は、ループを途中で止めて空配列を返すようにしています。
function excludeItems(items, excludes) { return items.filter((item) => { for (let i = 0; i < excludes.length; i++) { if (item[excludes[i].k] === excludes[i].v) { return false; } } return true; });}
この実装の時間複雑性は、O(N*M)
になります。N
はitems
の要素数で、M
はexcludes
の要素数です。ただし、この実装では普通のfilter()
を使っているため、実際には高速に動作することが期待できます。