Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка массива 
:(
    Опции темы
Webtoper
Дата 8.12.2014, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 8.12.2014

Репутация: нет
Всего: нет



Здравствуйте, сейчас более детально изучаю javascript. Но возник вопрос по массивам. В частности, как сделать так, чтобы массив сортировался после заданного пользователем количества ввода параметров (через prompt). Вообщем, не совсем понял, как представить массив как переменную, которой можно присвоить prompt и затем отсортировать... 
Подскажите пожалуйста, что здесь исправить, чтобы пользователь вводил 5 чисел, которые публиковались бы отсортированными по убыванию. Что не так? Спасибо.
Код

<script language="javascript"> 
for (i=0; i<5; i++) {
array [i] = Number(prompt ("Введите число"));
var array = [i];
array.sort(function(a, b) { return b - a; });
document.write (array + " ");}
</script>
</body>
</html>

PM MAIL   Вверх
Aliance
Дата 8.12.2014, 10:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



4 строка лишняя, зачем-то ей перетираете записанное значение.
По хорошему, нужно ДО цикла for определить переменную array как пустой массив, а дальше в цикле его заполнять. А оптом, ПОСЛЕ заполнения в цикле, один раз отсортировать и вывести.

ПС: и не нужно ставить пробел между переменной-массивом и квадратными скобками. А вот отступы внутри цикле лучше ставить. И не стоит использовать document.write, лучше использовать консоль или на крайняк alert.

Итого, код получается следующий:

Код

// объявляем
var array = [];
// заполняем
for (i=0; i<5; i++) {
    array [i] = Number(prompt ("Введите число"));
}
// сортируем
array.sort(function(a, b) { return b - a; });
// выводим
alert(array.join(', '));

PM MAIL WWW ICQ Skype   Вверх
Webtoper
Дата 9.12.2014, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 8.12.2014

Репутация: нет
Всего: нет



Спасибо, понятно. Ясно и доступно. Интересный оператор join. Насчет document.write - если не использовать, то как тогда предлагаете вывести на страницу результат?
Сделал document.write с оператором join:
Код
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=window-1251">
</head>
<body>
<script language="javascript">
// объявляем
var array = [];
// заполняем
for (i=0; i<5; i++) {
    array [i] = Number(prompt ("Введите число"));
}
// сортируем
array.sort(function(a, b) { return b - a; });
// выводим
alert(array.join(', '));
document.write (array.join(', '));
</script>
</body>
</html>

PM MAIL   Вверх
Aliance
Дата 9.12.2014, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Цитата(Webtoper @  9.12.2014,  05:09 Найти цитируемый пост)
Насчет document.write - если не использовать, то как тогда предлагаете вывести на страницу результат?

Лет 10 назад я бы вам этого не посоветовал, но сейчас есть масса других способов, которые куда привлекательней. Самый лучший вариант, имхо, вывод в консоль - console.log('text') - F12 и смотрите на вывод. Альтернатива - alert. Если нужен именно вывод в какое-то место в документе, то innreHTML/appendChild/etc...

document.write же есть смысл использовать только для счетчиков каких-нибудь, или динамических подключений скриптов.

Здесь можно почитать подробнее почему я так пишу: http://learn.javascript.ru/document-write

ПС: пара советов:
1) вы по прежнему ставите  лишние (а иногда они могут запутать) пробелы между переменной и символом [, либо между методом и символом ( - лучше так не делать ;)
2) атрибут language у тега script тоже древний, сейчас его никто не использует (если в этом нет прямой необходимости), а вот атрибут type="text/javascript" более желательный.
3) у вас зачем-то переменная i объявлена глобально (без ключевого слова var) - лучше так не делать для служебных переменных, дабы не засорять глобальную область видимости.
4) для приведения типа к числу можно использовать функцию parseInt, а не создавать конструктор Number, потому что это не нужно и медленее (кстати, если уж пользоваться конструктором, то не забывайте ключевое слово new)

Вы явно учитесь по старому учебнику. Советую сменить его на более свежий. Почитайте Флэнагана.
PM MAIL WWW ICQ Skype   Вверх
Webtoper
Дата 10.12.2014, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 8.12.2014

Репутация: нет
Всего: нет



Цитата(Aliance @  9.12.2014,  08:15 Найти цитируемый пост)
Лет 10 назад я бы вам этого не посоветовал, но сейчас есть масса других способов, которые куда привлекательней. Самый лучший вариант, имхо, вывод в консоль - console.log('text') - F12 и смотрите на вывод. Альтернатива - alert. Если нужен именно вывод в какое-то место в документе, то innreHTML/appendChild/etc...

А как сделать так, чтобы вывод текста на сайты происходил по запросу пользователя (например, как данном случае - после последовательного ввода данных по запросу)?
PM MAIL   Вверх
Webtoper
Дата 10.12.2014, 04:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 8.12.2014

Репутация: нет
Всего: нет



Цитата(Aliance @  9.12.2014,  08:15 Найти цитируемый пост)
4) для приведения типа к числу можно использовать функцию parseInt, а не создавать конструктор Number, потому что это не нужно и медленее (кстати, если уж пользоваться конструктором, то не забывайте ключевое слово new)

Вы явно учитесь по старому учебнику. Советую сменить его на более свежий. Почитайте Флэнагана. 

Просто стараюсь использовать как можно более простые переменные, чтобы понять логику алгоритмов и функций. Тем не менее, в дальнейшем конечно же планирую использовать более продвинутые операторы (которые в том числе включают в себя даже комплекс функций).
PM MAIL   Вверх
Aliance
Дата 10.12.2014, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Цитата(Webtoper @  10.12.2014,  02:44 Найти цитируемый пост)
А как сделать так, чтобы вывод текста на сайты происходил по запросу пользователя

Вообще честно говоря в вебе мало используется такой логики. Это скорее в паскале smile
Я навскидку не смогу привести ни одного сайта, использующего prompt. Более частое решение - обработка пользовательских форм. Вот вам пример:
http://jsfiddle.net/Aliance/vvcqgq38/ (нужно нажать RUN в левом верхнем углу)

Цитата(Webtoper @  10.12.2014,  05:12 Найти цитируемый пост)
Просто стараюсь использовать как можно более простые переменные, чтобы понять логику алгоритмов и функций. Тем не менее, в дальнейшем конечно же планирую использовать более продвинутые операторы

Все же лучше сразу учиться наиболее правильно - это может и будет сложнее, зато потом качество будет лучше. А то к неправильному подходу быстро привыкаешь и потом сложно переучиться.
PM MAIL WWW ICQ Skype   Вверх
Webtoper
Дата 10.12.2014, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 8.12.2014

Репутация: нет
Всего: нет



Спасибо за подсказки. Кстати, я так понял, здесь что for, что while в этом скрипте - не имеет значения?
PM MAIL   Вверх
Aliance
Дата 12.12.2014, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Цитата(Webtoper @  10.12.2014,  18:15 Найти цитируемый пост)
 Кстати, я так понял, здесь что for, что while в этом скрипте - не имеет значения?

один всегда можно выразить через другой
PM MAIL WWW ICQ Skype   Вверх
Webtoper
Дата 14.12.2014, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 8.12.2014

Репутация: нет
Всего: нет



символы текста (введенного по запросу пользователем) в виде чисел хочу отсортировать по убыванию и вывести на экран... но не получается... подскажите что не так в коде:
Код

<script language="javascript">
var str = new String (prompt ("Введите текст"));
var array = new Array();
for (i=0; i<str.length; i++) {
array[i] = str.charCodeAt(i);
document.write(+array[array.length - 1] + ', ');
array[array.length - 1].sort(sor);
function sor( arg1 , arg2 ) 
{if (arg1 < arg2) return 1; 
if (arg1 > arg2) return -1; 
if (arg1 == arg2) return 0; 
} 
</script>


Это сообщение отредактировал(а) Webtoper - 14.12.2014, 22:00
PM MAIL   Вверх
Aliance
Дата 15.12.2014, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Не так то, что вы не хотите видеть данные вам советы и продолжаете писать код горбатых годов.
Пройдитесь по этой хотя бы теме, и перечитайте что я писал по поводу атрибута languane, создания лишних объектов new String/Array. Далее, приведите код в порядок, выставив адекватные пробелы. А еще лучше создайте фиддл (он это сделает за вас) и киньте сюда ссылку.

А еще, если у вас новый вопрос - лучше создавать новую тему. Это написан ов правилах форума, если вы их конечно читали. А если старая решена - сделать об этом пометку, нажав вверху темы на "вопрос решен"
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.