|
Подскажите цикл на Javascript | ☑ | ||
---|---|---|---|---|
0
D_Pavel
04.09.12
✎
06:23
|
Нужно сделать цикл по такому алгоритму:
Объект = ПервыйОбъект; Выполнять до тех пор пока не будет Объект == ПоследнийОбъект Действие(Объект); Объект = Объект.Следующий; КонецЦикла Причем ПоследнийОбъект тоже должен попасть на выполнение. |
|||
1
skunk
04.09.12
✎
06:25
|
что за объект?
|
|||
2
Rie
04.09.12
✎
06:26
|
Объект = ПервыйОбъект
do { Current = Объект; Действие(Объект); Объект = Объект.Следующий; } while (Current!=ПоследнийОбъект); |
|||
3
D_Pavel
04.09.12
✎
06:29
|
(1) Любой объект у которого есть ссылка на следующий.
(2) Спасибо. |
|||
4
D_Pavel
04.09.12
✎
06:34
|
Еще вот так придумал, без дополнительной переменной:
do { if (!Объект) Объект = ПервыйОбъект ; else Объект = Объект.Следующий; Действие(Объект); } while (Объект!=ПоследнийОбъект); |
|||
5
Rie
04.09.12
✎
06:39
|
(4) Зачем на каждом шаге цикла делать дополнительную проверку?
Если уж очень хочется без дополнительной переменной, то Объект = ПервыйОбъект; do { Действие(Объект); if (Объект==ПоследнийОбъект) break; Объект = Объект.Следующий; } while(1) |
|||
6
Rie
04.09.12
✎
06:40
|
(по хорошему надо бы не только на последний объект, но и на null проверять - ибо программист предполагает, а оно по всякому бывает).
|
|||
7
smaharbA
04.09.12
✎
06:53
|
for (;x=x.next;x!=y){};
|
|||
8
smaharbA
04.09.12
✎
06:53
|
наоборот только
|
|||
9
Rie
04.09.12
✎
06:59
|
(7) Не взлетит. Проверка не даст выполниться телу цикла при x==ПоследнийОбъект
|
|||
10
smaharbA
04.09.12
✎
07:07
|
(9) все взлетит
|
|||
11
smaharbA
04.09.12
✎
07:30
|
for (;x!=y;x=x.next){};
|
|||
12
D_Pavel
04.09.12
✎
07:48
|
(11) Не взлетит. Первый объект не обработается.
|
|||
13
D_Pavel
04.09.12
✎
07:49
|
(5) тоже можно.
|
|||
14
Rie
04.09.12
✎
07:51
|
(10) Не взлетит.
function Cons(x, y) { this.hd = x; this.tl = y; } var a = new Cons(1,new Cons(2, new Cons(3,null))); var b = new Cons(5,new Cons(6,new Cons(7,a))); var t = b; for(; t!=a; t=t.tl) { alert(t.hd); } выдает 5 6 7 но никак не 5 6 7 1 |
|||
15
smaharbA
04.09.12
✎
08:01
|
(12) с чего это ?
|
|||
16
smaharbA
04.09.12
✎
08:02
|
for(; !t; t=t.tl) {
alert(t.hd); } |
|||
17
Rie
04.09.12
✎
08:03
|
(16) Это - несколько иная задача, нежели в (0).
|
|||
18
smaharbA
04.09.12
✎
08:06
|
вернее for(; t; t=t.tl)
|
|||
19
Rie
04.09.12
✎
08:14
|
(18) В (0) речь идёт не о сравнении с null, а с неким ПоследнийОбъект.
|
|||
20
orefkov
04.09.12
✎
10:01
|
for(var obj = firstObj; obj ; obj = obj.next)
{ action(obj); if(obj == lastObj) break; } |
|||
21
orefkov
04.09.12
✎
10:11
|
for(var obj = firstObj; obj ; obj = obj == lastObj ? null : obj.next)
action(obj); |
|||
22
D_Pavel
06.09.12
✎
08:51
|
Спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |