Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Сортировка массивов (ввод через prompt) (https://javascript.ru/forum/project/52199-sortirovka-massivov-vvod-cherez-prompt.html)

Skriptor 08.12.2014 05:22

Сортировка массивов (ввод через prompt)
 
Здравствуйте, сейчас более детально изучаю javascript. Но возник вопрос по массивам. В частности, как сделать так, чтобы массив сортировался после заданного пользователем количества ввода параметров (через prompt). Вообщем, не совсем понял, как представить массив как переменную, которой можно присвоить prompt и затем отсортировать...
Подскажите пожалуйста, что здесь исправить, чтобы пользователь вводил 5 чисел, которые публиковались бы отсортированными по убыванию. Что не так? Спасибо.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=window-1251">
</head>
<body>
<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>

danik.js 08.12.2014 06:24

Цитата:

Сообщение от Skriptor
array [i] = Number(prompt ("Введите число"));
var array

То есть ты сначала пытаешься заполнить массив, а только потом его создаешь? Не считаешь что должно происходить наоборот?

И массив создается так: var array = [];

krutoy 08.12.2014 12:00

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=window-1251">
</head>
<body>
<script language="javascript">
array=[]
for (i=0; i<5; i++) {
array.push(+prompt ("Введите число"))
}
delete(i)
document.write (array.sort(function(a, b){return b-a}).join(" "));
</script>
</body>
</html>

рони 08.12.2014 12:13

krutoy,
ну не будет же сортировать числа ваш код.

рони 08.12.2014 12:15

krutoy,
sort() по умолчанию сортирует всё как строки

krutoy 08.12.2014 12:19

рони,
Ну так сортирует же, что значит не будет?

krutoy 08.12.2014 12:30

Цитата:

Сообщение от рони
sort() по умолчанию сортирует всё как строки

И почему это он должен их сортировать как строки, если видит он их, как числа.
;[2,1,3].sort(function(x){alert(typeof x)})

рони 08.12.2014 12:39

krutoy,
не видит это вам кажется :stop:

krutoy 08.12.2014 12:41

Цитата:

Сообщение от рони
это вам кажется

ага, может js-двигу тоже кажется?

рони 08.12.2014 12:44

krutoy,
alert([8,11,44,0,5].sort());

Цитата:

Сообщение от рони
sort() по умолчанию сортирует всё как строки


рони 08.12.2014 12:50

:write: и reverse ненадо
alert([8,11,44,0,5].sort(function (a,b){return b - a}));

krutoy 08.12.2014 12:55

рони,
Да, похоже на то, исправил, спасибо.

krutoy 08.12.2014 12:58

рони,
А почему так сделано?
ЗЫ думаю потому, что так реализация проще. Все обрабатывается по единому алгоритму, если не указано иное.

Skriptor 08.12.2014 16:14

Цитата:

Сообщение от krutoy (Сообщение 345454)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=window-1251">
</head>
<body>
<script language="javascript">
array=[]
for (i=0; i<5; i++) {
array.push(+prompt ("Введите число"))
}
delete(i)
document.write (array.sort(function(a, b){return b-a}).join(" "));
</script>
</body>
</html>

Отличнейше! Спасибо! Очень интересный вариант, и работает! Сейчас разбираю почему у меня выдавало ошибку в консоли на функцию (array.sort(function(a, b){return b-a})
Также интересно Вы применили операторы push, delete(i) и join. Кроме того, вопрос - как без параметра Number() решили задачу введения не строчных, а числовых значений в параметре prompt.

рони 08.12.2014 16:35

Skriptor,
а главное как он ловко использует charset=window-1251, с каким упорством игнорирует var, зато умеет всунуть ненужный delete и как брутально смотрится сам код, нет никаких гламурных отступов ... мда

kobezzza 08.12.2014 16:40

Цитата:

Сообщение от рони (Сообщение 345458)
krutoy,
sort() по умолчанию сортирует всё как строки

Век живи - век учись, я этого не знал :)

krutoy 08.12.2014 17:15

Цитата:

Сообщение от рони
ненужный delete

for (i=0; i<5; i++) {
}
alert(i)
alert(window["i"])
delete(i)
alert(window["i"])
alert(i)


for (var i=0; i<5; i++) {
}
alert(i)
alert(window["i"])
delete(i)
alert(window["i"])
alert(i)

Предлагаешь в функцию оборачивать каждый раз?

krutoy 08.12.2014 17:20

Цитата:

Сообщение от Skriptor
как без параметра Number() решили задачу введения не строчных, а числовых значений в параметре prompt.

там плюс стоит перед промпт,
alert(typeof +"10")

Так можно приводить к числу, просто короче.

danik.js 08.12.2014 17:33

Цитата:

Сообщение от krutoy
Предлагаешь в функцию оборачивать каждый раз?

Предлагаешь в глобал срать каждый раз?

krutoy 08.12.2014 18:03

Цитата:

Сообщение от danik.js
Предлагаешь в глобал срать каждый раз?

Ты блять, идиот? Рони утверждал, что я там delete бестолку поставил.
Цитата:

зато умеет всунуть ненужный delete

Deff 08.12.2014 18:22

krutoy,
Взял да обернул, чо тебе стоит, вот я на раз:

krutoy 08.12.2014 18:29

Deff,
Смысл в том, что delete там не просто так стоит. Можно и обернуть, да.

Deff 08.12.2014 18:32

krutoy,
:dance: слишком серъёзен!

Skriptor 12.12.2014 04:09

Как представить это в виде функции, которую можно вставить в любую часть документа? Попробовал - не срабатывает... почему? что исправить?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=window-1251">
</head>
<body>
<script language="javascript">
function sortirovka (array) {
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>
<script language="javascript">
function sortirovka (array) 
</script>
</body>
</html>


Часовой пояс GMT +3, время: 11:04.