Я только начинаю учить JS и застряла на одном задании, прошу вашей помощи.
Задание: дан список инструкторов, нужно определить, какой инструктор имеет самое длинное имя.
const instructorWithLongestName = function(instructors) {
// Put your solution here
};
console.log(instructorWithLongestName([
{name: "Samuel", course: "iOS"},
{name: "Jeremiah", course: "Web"},
{name: "Ophilia", course: "Web"},
{name: "Donald", course: "Web"}
]);
console.log(instructorWithLongestName([
{name: "Matthew", course: "Web"},
{name: "David", course: "iOS"},
{name: "Domascus", course: "Web"}
]);
Вывод должен быть таким:
{name: "Jeremiah", course: "Web"}
{name: "Domascus", course: "Web"}
Решение должно быть на чистом JS без использования каких-либо библиотек.
Спасибо, тем кто отзовется и поможет.
Изначальный вариант с сортировкой (ну почти изначальный... :):
const instructorWithLongestName = function(instructors) {
return instructors.
sort((a,b) => b.name.length - a.name.length)[0];
};
console.log(instructorWithLongestName([
{name: "Samuel", course: "iOS"},
{name: "Jeremiah", course: "Web"},
{name: "Ophilia", course: "Web"},
{name: "Donald", course: "Web"}
]));
console.log(instructorWithLongestName([
{name: "Matthew", course: "Web"},
{name: "David", course: "iOS"},
{name: "Domascus", course: "Web"}
]));
То же, но с учётом вариантов, когда на входе пустой массив или количество имен с максимальной длиной более одного. Тут перебора в общем случае почти в два раза больше, чем надо, зато выглядит очень лаконично:
const instructorsWithLongestName = function(instructors) {
//Игнорируем отсутствие параметров
if (!instructors) return [];
return instructors.
sort((a,b) => b.name.length - a.name.length).
filter((a,b,c) => a.name.length == c[0].name.length);
};
console.log(instructorsWithLongestName([
{name: "Samuel", course: "iOS"},
{name: "Jeremiah", course: "Web"},
{name: "Ophilia", course: "Web"},
{name: "Donald", course: "Web"}
]));
console.log(instructorsWithLongestName([
{name: "Matthew", course: "Web"},
{name: "David", course: "iOS"},
{name: "Domascus", course: "Web"}
]));
console.log(instructorsWithLongestName([]));
console.log(instructorsWithLongestName());
Вариант с reduce, который мне все же не нравится, так как тихо выбирает только одного из нескольких возможных с максимальной длиной имени.
const instructorWithLongestName = function(instructors) {
return instructors.reduce((longestName, instructor) =>
longestName.name.length > instructor.name.length ? longestName : instructor
);
};
console.log(instructorWithLongestName([
{name: "Samuel", course: "iOS"},
{name: "Jeremiah", course: "Web"},
{name: "Ophilia", course: "Web"},
{name: "Donald", course: "Web"}
]));
console.log(instructorWithLongestName([
{name: "Matthew", course: "Web"},
{name: "David", course: "iOS"},
{name: "Domascus", course: "Web"}
]));
Хотя вариант с reduce лучше, всё-таки предложу такой:
function instructorWithLongestName(instructors) {
var len = Math.max(...instructors.map(x => x.name.length))
return instructors.find(x => x.name.length === len);
}
console.log(instructorWithLongestName([
{name: "Samuel", course: "iOS"},
{name: "Jeremiah", course: "Web"},
{name: "Ophilia", course: "Web"},
{name: "Donald", course: "Web"},
]));
console.log(instructorWithLongestName([
{name: "Matthew", course: "Web"},
{name: "David", course: "iOS"},
{name: "Domascus", course: "Web"},
]));
Просто на случай если много с одинаковой длиной
const instructorWithLongestName = function(instructors) {
let result = [],
len = 0;
for(let i of instructors){
if (i.name.length > len){
len = i.name.length;
result = [];
}
if (i.name.length === len){
result.push(i);
}
}
return result;
};
console.log(instructorWithLongestName([
{name: "Samuel", course: "iOS"},
{name: "Jeremiah", course: "Web"},
{name: "Ophilias", course: "Web"},
{name: "Donald", course: "Web"}
]));
console.log(instructorWithLongestName([
{name: "Matthew", course: "Web"},
{name: "David", course: "iOS"},
{name: "Domascus", course: "Web"}
]));
const instructorWithLongestName = function(instructors) {
let maxLength = Math.max(...instructors.map(e => e.name.length));
return instructors.filter(e => e.name.length === maxLength);
};
console.log(instructorWithLongestName([
{name: "Samuel", course: "iOS"},
{name: "Jeremiah", course: "Web"},
{name: "Ophilias", course: "Web"},
{name: "Donald", course: "Web"}
]));
console.log(instructorWithLongestName([
{name: "Matthew", course: "Web"},
{name: "David", course: "iOS"},
{name: "Domascus", course: "Web"}
]));
Виртуальный выделенный сервер (VDS) становится отличным выбором
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
необходимо получить координаты по адресу через геокодер из JSON, и всё бы хорошо, но парситься полученный JSON не хочет, выдаёт ошибкуПри этом...