Режем второй параметр на куски, перебираем полученный массив ключей для извлечения значения вложенного свойства - следующее значение будет свойством предыдущего с именем, равным текущему элементу массива:
const sorted = (arr, path) => arr
.map(function(n) {
return [ n, this.reduce((p, c) => p?.[c], n) ];
}, path.split('.'))
.sort((a, b) => a[1] - b[1])
.map(n => n[0]);
А вообще, предлагаю изменить тип второго параметра со строки на функцию:
const sorted = (arr, key) => arr
.map(n => [ n, key(n) ])
.sort((a, b) => a[1] - b[1])
.map(n => n[0]);
const sortedByCommentsCount = sorted(arr, n => n.comments.count);
const sortedByLengthDesc = sorted(arr, n => -n.length);