Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   indexOf не хочет определять уровень в массиве (http://www.flasher.ru/forum/showthread.php?t=154292)

adman 15.04.2011 12:22

indexOf не хочет определять уровень в массиве
 
Код AS3:

var arr:Array = new Array();
 
arr.push({name:"tru", level:"18"});//0
arr.push({name:"one", level:"22"});//1
 
trace(arr.indexOf({name:"one", level:"22"}))//-1

Мне надо определять или по name или по level его уровень, что бы я его мог потом удалить из массива

Помоги те плиз

DZHETIGAPA 15.04.2011 12:31

Ты помещаешь объект в массив. А indexOf - это для стринговых переменных.

adman 15.04.2011 12:36

Тогда как мне удалить по name или по level

iNils 15.04.2011 12:45

Цитата:

Сообщение от DZHETIGAPA (Сообщение 989542)
Ты помещаешь объект в массив. А indexOf - это для стринговых переменных.

Ничего подобного. Ищется любой элемент. Просто в примере используются два разных объекта с одинаковым содержимым.
Код AS3:

var o1:Object = {name:"tru", level:"18"};
var o2:Object = {name:"one", level:"22"};
var arr:Array = new Array();
 
arr.push(o1);//0
arr.push(o2);//1
 
trace(arr.indexOf(o2))//1


DZHETIGAPA 15.04.2011 12:59

Цитата:

Сообщение от iNils (Сообщение 989546)
Ничего подобного. Ищется любой элемент. Просто в примере используются два разных объекта с одинаковым содержимым.

Спасибо за просветление. Даже и не знал. Надо будет попробовать.

adman 15.04.2011 12:59

iNils это конечно хорошая штука, я её даже использую потом, но как удалить по level

i.o. 15.04.2011 13:01

обойти вручную, не?

adman 15.04.2011 13:10

ваще я щас думаю сделать с помощью это кода то что мне надо:
Код AS3:

function removeDuplicate(odetaja_odezhda_array:Array):void {
var i:int;
var j:int;
        for (i = 0; i < odetaja_odezhda_array.length - 1; i++) {
                for (j = i + 1; j < odetaja_odezhda_array.length; j++) {
                        if (odetaja_odezhda_array[i].level===odetaja_odezhda_array[j].level) {
                                odetaja_odezhda_array.splice(j, 1);
                        }
                }
        }
}
removeDuplicate(odetaja_odezhda_array);

Но я не знаю как удалить с дублем орегинал

Добавлено через 47 секунд
в ручную не получится

i.o. 15.04.2011 13:12

уж удаление дубликатов поищите - неделю назад буквально была тема с кучей ответов

adman 15.04.2011 13:16

знаю одну тему сам создавал)))

i.o. 15.04.2011 13:18

а по поиску объекта по свойству подскажу:
Код AS3:

var arr:Array = new Array();
arr.push( {name:"one", level:"1"} );
arr.push( {name:"two", level:"2"} );
arr.push( {name:"three", level:"3"} );
 
 
trace( getItemLastIndexIn( arr, "two", "name") )// 1
 
 
function getItemLastIndexIn( arr:Array, targetValue:*, propertyName:String=null ):int
{
        if (!arr)
                return -1;
 
        var i:int = arr.length;
 
        if (propertyName)
                while (i-- && arr[i][propertyName] != targetValue);
        else
                while (i-- && arr[i] != targetValue);
 
        return i;
}


adman 15.04.2011 17:39

тут прям пакет ошибок))) но код работает говорит ошибка

Scene 1, Layer 'Layer 1', Frame 1, Line 15 Warning: 1106: Empty statement found where block of code expected. Did you type ';' accidentally?

iNils 15.04.2011 18:10

Код рабочий.

adman 15.04.2011 18:31

вот лучше вариант
Код AS3:

var arr:Array = new Array();
arr.push({name:"one", level:1});
arr.push({name:"two", level:2});
arr.push({name:"three", level:3});
 
trace(getItemLastIndexIn( arr, 3, "level"));
 
function getItemLastIndexIn( arr:Array, targetValue:int, propertyName:String=null ):int {
        if (! arr) {
                return -1;
        }
        for (var i in arr) {
                if (propertyName!=null) {
                        if (arr[i][propertyName]==targetValue) {
                                return i;
                        }
                } else {
                        if (arr[i]==targetValue) {
                                return i;
                        }
                }
        }
        return -1;
}


i.o. 16.04.2011 05:41

Цитата:

вот лучше вариант
если честно - не лучше

Добавлено через 1 минуту
можете переписать так, если ошибки какие-то у вас вылетают:
Код AS3:

function getItemLastIndexIn( arr:Array, targetValue:*, propertyName:String=null ):int
{
        if (!arr)
                return -1;
 
        var i:int = arr.length;
 
        if (propertyName)
        {
                while (i-- > 0 && arr[i][propertyName] != targetValue)
                {}
        }
        else
        {
                while (i-- > 0 && arr[i] != targetValue)
                {}
        }
 
        return i;
}



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

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