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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проход по ассоциативному массиву 
V
    Опции темы
NLspieler
Дата 5.10.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно ли в js пройтись по ассоциативному массиву?

В php есть жутко удобная функция foreach.
Есть ли аналог в js?
PM MAIL   Вверх
skyboy
Дата 5.10.2009, 18:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



for(i in list_variable) alert(list_variable[i]);
PM MAIL   Вверх
mxt
Дата 5.10.2009, 19:11 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(NLspieler @  5.10.2009,  18:23 Найти цитируемый пост)
Можно ли в js пройтись по ассоциативному массиву?

ы ) в js такого нету )) это уже обьект ))
--------------------
PM MAIL   Вверх
bars80080
Дата 5.10.2009, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



mxt, что это меняет?

мы даже в своё время дамп-функцию написали:

Код

/*****   dumper functions   ***************************************************/
function dump_for(az, level, durch) {
    if(az.__lookingfor) return '!!!recursion!!!';
    var k = 0, s = '', otstup = '';
    for(var o = 0; o < level; o++) otstup += '    ';
    for(var j in az) { k++; }
    if(typeof(az)=='string') s+='string: \'' + az + '\'';
    else if(!isNaN(az)) s += 'int: "' + az + '"' ;
    else {  
        az.__lookingfor=1;
        for(var i in az) 
            if(i!='__lookingfor'){
                s += durch + otstup + i + " => ";
                s += dump_for(az[i], (level + 1), durch);
            }
        delete(az.__lookingfor); 
    }
    return s ;
}
function dump(massa, durch) {
    level = 0;
    return dump_for(massa, level, durch); }
/******************************************************************************/

var qw = new Array();
qw[0] = 23;
qw[1] = 43;
qw[5] = 56;
qw['as'] = 11;
qw[6] = new Array(1, 2, 'rf', 5);
qw[6][4] = new Array('34', 34);
qw[8] = 12;
as = '23';
document.write('<pre>' + dump(qw, '<br />') + '</pre>');
alert(dump(qw, '\r\n'));

PM MAIL WWW   Вверх
NLspieler
Дата 5.10.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Благодарю за помощь.

Добавлено через 8 минут и 49 секунд
for(i in list_variable) alert(list_variable[i]);
прекрасно справляется с поставленной задачей.

Но появилась другая проблема.
Нужно узнать количество элементов массива.
Как оказалось, array.length не работает для ассоциативных массивов и показывает всегда 0. 

Первое, что пришло в голову, написать функцию:
Код

function count (array)
{
    var n = 0 ;
    for (key in array) n++ ;
    return n ;
}

она работает, но кажется не православной.

PM MAIL   Вверх
youri
Дата 5.10.2009, 20:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



на самом деле в js действительно нету ассоциативных массивов, просто объекты можно использовать как ассоциативные массивы. Хотя для упрощения, я считаю, можно отдельные объекты называть ассоциативными массивами
а вопрос про количество элементов в ассоциативном массиве непроизвольно вызывает вопрос: что в этом массиве?
PM   Вверх
NLspieler
Дата 6.10.2009, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



<<<<>>>>

Это сообщение отредактировал(а) NLspieler - 6.10.2009, 07:22
PM MAIL   Вверх
NLspieler
Дата 6.10.2009, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(youri @  5.10.2009,  20:27 Найти цитируемый пост)
что в этом массиве?

В этом массиве переменные, для гет ссылки.

Код

var my_array = new Array() ;
my_array['a'] = "Оды" ;
my_array['b'] = "Два" ;

var link = make_get_link (my_array , "index.php") ;
alert (link) ;
//Результат:     index.php?a=Оды&b=Два


Функция make_get_link использует кроме всего прочего, функцию о количестве элементов этого массива с переменными.
PM MAIL   Вверх
youri
Дата 6.10.2009, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



покажи функцию. Зачем ей знать количество элементов?
PM   Вверх
NLspieler
Дата 6.10.2009, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

function make_get_link (var_array , url)
{
    var count_ = count (var_array) ;
    if (count_ == 0) return url ;  //Причина номер 1
    var return_var = url + "?" ;
    for (var_name in var_array)
    {
        return_var += var_name + "=" + var_array[var_name] ;
        if (count_ > 1) return_var += "&" ;   //Причина номер 2
        count_-- ;
    }
    return return_var ;
}

function count (array)
{
    var n = 0 ;
    for (key in array) n++ ;
    return n ;
}

PM MAIL   Вверх
mxt
Дата 6.10.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

function make_get_link (var_array , url)
{
    var buf = [];

    for (var_name in var_array)
    {
        buf.push(var_name + "=" + encodeURIComponent(var_array[var_name]));
    }

    return (buf.length > 0) ? url + "?" + buf.join("&") : url ;
}

Код

>>> make_get_link({test:12, test2:"bbc&&"}, "http://www.test.php")
"http://www.test.php?test=12&test2=bbc%26%26"


Это сообщение отредактировал(а) mxt - 6.10.2009, 10:15
--------------------
PM MAIL   Вверх
bars80080
Дата 6.10.2009, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Код

function make_get_link (var_array , url)
{
    var return_var = url;
    var i = 0;
    for (var_name in var_array)
    {
        if(i == 0) { return_var += "?"; }
        else { return_var += "&"; }
        return_var += var_name + "=" + var_array[var_name] ;
        i++;
    }
    return return_var ;
}
причин нет
PM MAIL WWW   Вверх
mxt
Дата 6.10.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(bars80080 @  5.10.2009,  19:23 Найти цитируемый пост)
mxt, что это меняет?

меняет само представление о вещах.  то массив а это обьект, и в массиве есть такие методы и свойства, которых нету в обьекте

Добавлено через 9 минут и 43 секунды
все в javascript является обьектами;  только с разными свойствами и методами.

--------------------
PM MAIL   Вверх
bars80080
Дата 6.10.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Цитата(mxt @  6.10.2009,  10:21 Найти цитируемый пост)
меняет само представление о вещах


mxt, что это меняет в отношении поставленной задачи?

Цитата(NLspieler @  5.10.2009,  18:23 Найти цитируемый пост)
Можно ли в js пройтись по ассоциативному массиву?


PM MAIL WWW   Вверх
mxt
Дата 6.10.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(bars80080 @  6.10.2009,  10:43 Найти цитируемый пост)
mxt, что это меняет в отношении поставленной задачи?

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


 




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


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

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