Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Action script 2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=49)
-   -   выдернуть одно поле из массива (http://www.flasher.ru/forum/showthread.php?t=64568)

Nirth 06.11.2004 14:55

выдернуть одно поле из массива
 
есть массив - var buttons:Array = ["site","exp","art","source"]
есть функция которая выдерает имя кнопки(тоесть например site, but)
Код:

function getMenus() {
 for (var i = 0; i<this.buttons.length; i++) {
  if (this.buttons[i] == getMenuName()) {
  trace(this.buttons)
  this.buttons.splice(i, i);
  trace(this._name+" ar "+this.buttons);
  //break;
  }
 }
}

но зараза не работает, что я тут делаю не так?

silin 06.11.2004 16:58

причин может быть много:
смотри
-где вызывешь getMenus - видно ли там buttons,
-что возвращает getMenuName -строку или ссылку

Nirth 06.11.2004 21:19

вызываю в том же классе, а гетМенюс возвращает строку(function getMenus():String)

silin 06.11.2004 22:29

тогда еще :
Цитата:

splice возвращает новый массив, извлекая из основного массива часть последовательности. Основной массив при этом остаётся без изменений. Возвращаемый массив, включает элемент start и все элементы до/но не включая/ элемента end .
а что ты ожидаешь в результате неясно ..

Nirth 06.11.2004 22:34

смотрим код
Код:

var buttons:Array = ["art", "site", "exp", "source"];
trace("before "+this.buttons);
this.buttons.splice(1,1)
trace("after "+this.buttons);

возвращает нам
before art,site,exp,source
after art,exp,source


тоесть он выдернул из массива баттонз 1 эллемент(сплайс)

теперь смотрим код
Код:

var buttons:Array = ["art", "site", "exp", "source"];
trace("before "+this.buttons);
for (i=0; i<this.buttons.length; i++) {
        if (this.buttons[i] == "art") {
                this.buttons.splice(i, i);
                break;
        }
}
trace("after "+this.buttons);

возвращает

before art,site,exp,source
after art,site,exp,source

тобишь он ничерта не сделал почему?

но самое интересное.
Код:

var buttons:Array = ["art", "site", "exp", "source"];
trace("before "+this.buttons);
for (i=0; i<this.buttons.length; i++) {
//мы заменили art
//(который первый эллемент) на site(не первый)
        if (this.buttons[i] == "site")
                this.buttons.splice(i, i);
                break;
        }
}
trace("after "+this.buttons);

и получаем то что собственно нужно.
before art,site,exp,source
after art,exp,source

silin 06.11.2004 23:02

прикол, однако..
раз они так, напиши :)
for (i=0; i<this.buttons.length; i++) {
if (this.buttons[i] == "art") {
if(i)this.buttons.splice(i, i)
else this.buttons.shift()
break;
}
}

Nirth 07.11.2004 14:56

Silin
спасибо огромное, работает

RATFACE 10.11.2004 15:20

Ребята! Вам просто надо выспаться! -))
 
вы просто очень ребят не внимательны! Код весь етот работает нормально ток вот вы его не правильно используете!

Что такое splice для Array удалить елемент с какого по какой!


в случает с проверкой на "art" твоя команда выполняеться фактически так

buttons.splice(i,i) = buttons.splice(0,0)

второй параметр равен нулю а он всегда должен равен быть в ТВОЕМ случае = 1 и все будет работать

код такой

var buttons:Array = ["art", "site", "exp", "source"];
trace("before "+this.buttons);
for (i=0; i<this.buttons.length; i++)
{
if (this.buttons[i] == "art")
{
trace("! = " + i)
this.buttons.splice(i,1);
break;
}
}
trace("after "+this.buttons);


Часовой пояс GMT +4, время: 14:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.