Array.prototype.toSorted() - JavaScript | MDN
模範解答
🔑 toSorted() が length に基づいて要素数を決定し、配列ライクなオブジェクトとして処理する前提を理解しているか。
回答履歴 (2回)
あなたの回答
toSortedの流れとして、キーが0から順番に要素を検査していくので、lengthが無いとキーのゴールが分からなくなってしまう。 lengthで要素数が分かれば、0からその値までを順番に見ていくだけで良い。オブジェクトでも、キーが0から5で、lengthプロパティに6が入っていれば動くことになるはず
フィードバック
toSorted はまず this.length を読み取り、その値をもとに 0 から length-1 までのインデックスを要素として扱います。ユーザーの回答は「length がないとどこまで走査すべきかわからない」という点を正しく押さえています。また、配列ライクなオブジェクトが 0 から始まる連番キーと length を持てば動作する、という理解も概ね正しいです。仕様的には「length に基づいてコピー・ソートの対象範囲を決める」という点を明示できると、より完全な説明になります。
あなたの回答
lengthが無いとsortのイテレーション数が判定できないため。 toSortedは、実際の配列の要素数を数えるのではなく、lengthプロパティの値を取得して0からその数-1までをインデックスアクセスで探索する。その探索結果の要素を並び替えた配列を返すので、lengthが無いオブジェクトには適用できない
フィードバック
ユーザーの回答は、toSorted が length プロパティに基づいて 0 から length-1 までインデックスアクセスを行い、その結果を並び替えて返すという処理の流れを正しく説明できています。また、length がないとイテレーション範囲を決められないため配列ライクとして扱えない、という点も模範解答と整合的です。模範解答にある「配列ライクとしての前提が崩れる」という表現を補えば、より仕様意図が明確になりますが、内容としては十分正確です。