Задача: Реализуйте функцию на вход которой будет подаваться массив, а на выходе будет строка с отсортированными элементами и разделенная символом "|".
Моё решение:
let arr = ['Книги', 'Фильмы', 'Видео', 'Контакты', 'Поисковик', 1, 5, 3, 2];
sortAndJoin = (unsortedArr) => {
let tmpArr = arr.sort();
for (let i = 0; i < arr.length; i++)
{
if (arr[i]!= undefined) {
tmpArr.push(arr[i]);
}
return tmpArr.join('|');
}
}
document.write(sortAndJoin(arr));
}
JavaScript
Прошу помочь с решением, исправить ошибки в коде.
В вашем решении есть несколько проблем:
1. Функция `sortAndJoin` использует переменную `arr`, хотя она должна работать с параметром `unsortedArr`.
2. В цикле `for`, `push` добавляет элементы в `tmpArr`, которые уже содержат отсортированный массив. Это приводит к дублированию элементов.
3. Оператор `return` находится внутри цикла, так что функция возвращает результат после первой итерации.
4. Лишняя закрывающая фигурная скобка `}` в конце кода.
Исправленная версия кода:
```javascript
let arr = ['Книги', 'Фильмы', 'Видео', 'Контакты', 'Поисковик', 1, 5, 3, 2];
sortAndJoin = (unsortedArr) => {
// Сначала приводим все элементы к строкам
let tmpArr = unsortedArr.map(String);
// Сортируем
tmpArr.sort();
// Возвращаем результат
return tmpArr.join('|');
}
document.write(sortAndJoin(arr));
```
Этот код отсортирует все элементы как строки, потому что метод `sort()` в JavaScript сортирует элементы как строки. Если вы хотите сортировать числа как числа и строки как строки, вам нужно будет изменить подход.
1. Функция `sortAndJoin` использует переменную `arr`, хотя она должна работать с параметром `unsortedArr`.
2. В цикле `for`, `push` добавляет элементы в `tmpArr`, которые уже содержат отсортированный массив. Это приводит к дублированию элементов.
3. Оператор `return` находится внутри цикла, так что функция возвращает результат после первой итерации.
4. Лишняя закрывающая фигурная скобка `}` в конце кода.
Исправленная версия кода:
```javascript
let arr = ['Книги', 'Фильмы', 'Видео', 'Контакты', 'Поисковик', 1, 5, 3, 2];
sortAndJoin = (unsortedArr) => {
// Сначала приводим все элементы к строкам
let tmpArr = unsortedArr.map(String);
// Сортируем
tmpArr.sort();
// Возвращаем результат
return tmpArr.join('|');
}
document.write(sortAndJoin(arr));
```
Этот код отсортирует все элементы как строки, потому что метод `sort()` в JavaScript сортирует элементы как строки. Если вы хотите сортировать числа как числа и строки как строки, вам нужно будет изменить подход.
Артур Хамидуллин
Благодарю!!!
let books = ['Книги', 11, 'Фильмы', 'Видео', 7, 'Контакты', "11", 'Поисковик', 100, 5, 3, 28];
const compare = (a, b) => {
a = typeof a === 'string' && isNaN(a) ? a : Number.parseFloat(a);
b = typeof b === 'string' && isNaN(b) ? b : Number.parseFloat(b);
if (typeof a === 'string' && typeof b === 'string') {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
if (typeof a === 'number' && typeof b === 'string') {
return -1;
}
if (typeof a === 'string' && typeof b === 'number') {
return 1;
}
if (typeof a === 'number' && typeof b === 'number') {
return a - b;
}
return 0;
};
const sortAndJoin = (arr) => arr.sort(compare).join(' | ');
sortAndJoin(books);
Зачем создавать новый массив? После сортировки просто join и все
старое решение...
let books = ['Книги', 'Фильмы', 'Видео', 'Контакты', 'Поисковик', 1, 5, 3, 2];
const sortAndJoin = (arr) => arr.sort().join(' | ')
sortAndJoin(books)
Похожие вопросы
- Где я сделал ошибку в коде
- Не могу найти ошибку в коде.
- Помогите с решением задачи.
- Прошу помочь с реализацией функции buildOptions.
- Проверьте 2 кода ((( пожалуйста и ткните носом на ошибку. В общем 1 код работает частично, а второй вообще не работает. JS
- Помогите разобраться в логике кода (замыкания)
- Помогите с кодом Javascript
- Помогите разобраться с кодом (JavaScript)
- В чем ошибка кода?
- Помогите разобрать след код на JS