Цикл по хэш-массиву

 
0
 
JavaScript
ava
check | 20.08.2007, 12:47
У меня есть хэш который нужно определенным образом отфильтровать

var plans = {
1446: 'И-311',
1448: 'И-411',
1453: 'И-511',
1457: 'И-611',
1460: 'П-712'
}


Написал функцию которая фильтрует хэш по ключу

function HashFilter(x) {
groups = new Array();
i = 0;
for (var key in plans) {
if (key == x) {
groups[i] = plans[key];
i++;
}
}
/*
дальше какие-то действия с массивом groups
*/

и столкнулся с вышеназванной проблемой.
В ИЕ7 функция не работает, а конкретно не работает цикл for (var key in plans)
Почему так и что можно сделать?

added later:
При это ие7 зараза ещё никаких ошибок не выдает. Для него есть какой-нибудь плагин для отладка JavaScript? Internet Explorer Developer Toolbar это не оно?
Comments (7)
ava
dXdYdZ | 20.08.2007, 12:02 #
Вместо функции HashFilter(x) можно написать plans[x]. Ведь всё равно 2 одинаковых ключа не допустимо.
ava
check | 20.08.2007, 12:11 #
Цитата (dXdYdZ @ 20.8.2007, 12:02 findReferencedText)
Ведь всё равно 2 одинаковых ключа не допустимо
Об этом я не подумал, тогда наверное мне хэш вообще не подойдёт.
ava
Zeroglif | 20.08.2007, 12:20 #
IE7 под рукой нет, но нужна ли вообще такая функция, зачем собирать что-то в массив (groups), если свойство всё-равно живёт в одном экземпляре, и есть ли необходимость сравнивать каждое свойство (key) исходного объекта (plans) с некой строкой (x) если можно просто один раз проверить наличие такого свойства в объекте if (x in plans)?
ava
check | 20.08.2007, 13:07 #
Да-да, извините ступил. Тут хэши вообще не причём.
Думаю, нужно создать два "параллельных" массива и фильтровать "правый" массив по значениям "левого".
Дело в том, что то, что я пытался представить в виде ключей хэша - не набор уникальных значений, эти значения могут повторяться.
ava
check | 20.08.2007, 18:31 #
Оффтоп получается, но наверное создавать новую тему смысла нет

plans = new Array();
plans[0]='И-311';
plans[1]='И-411';
plans[2]='И-511';
plans[3]='И-611';
plans[4]='П-312';
plans[5]='П-412';
plans[6]='П-512';
plans[7]='П-612';
plans[8]='И-017';
plans[9]='И-211';
plans[10]='И-311';

ReleaseID = new Array();
ReleaseID[0]=1446;
ReleaseID[1]=1448;
ReleaseID[2]=1453;
ReleaseID[3]=1457;
ReleaseID[4]=1447;
ReleaseID[5]=1449;
ReleaseID[6]=1454;
ReleaseID[7]=1458;
ReleaseID[8]=41;
ReleaseID[9]=603;
ReleaseID[10]=603;


function ArrayFilter(x) {
var groups = new Array();
for (var i=0; i < ReleaseID.length; i++) {
if (ReleaseID[i] == x) {
groups[i] = plans[i];
}
}
document.getElementById('groups').innerHTML = "";
for (var j=0; j < groups.length; j++) {
group = new String(groups[j]);
if (group != 'undefined')
document.getElementById('groups').innerHTML += "<tr bgcolor='#FFFFFF'><td width='3%'>&nbsp;</td><td width='3%'>&nbsp;</td><td>" + group + "</td></tr>";
}
}

Вот этот код опять-таки отказывается работать в IE, в FF работает нормально.
Ошибку вызывает любая попытка присвоить что-либо document.getElementById('groups').innerHTML.
С document.getElementById('groups') всё в порядке, возвращает объект.
id="groups" присвоен пустой таблице

<table border="1" width="100%" id="groups">

</table>


При этом IE обнаруживает в document.getElementById('groups').innerHTML теги <TBODY></TBODY>.
Ладно, это его право, но я на всякий случай делаю так

function ArrayFilter(x) {
var groups = new Array();
for (var i=0; i < ReleaseID.length; i++) {
if (ReleaseID[i] == x) {
groups[i] = plans[i];
}
}
row = "";
document.getElementById('groups').innerHTML = "";
rowString = new String(row);
for (var j=0; j < groups.length; j++) {
var group = new String(groups[j]);
if (group != 'undefined') {
row = rowString.replace('<TBODY></TBODY>', '');
row += "<tr bgcolor='#FFFFFF'><td width='3%'>&nbsp;</td><td width='3%'>&nbsp;</td><td>" + group + "</td></tr>";
}
}
document.getElementById('groups').innerHTML = row;
}

По прежнему в FF все работает, а в IE все обламывается при первой же попытки записать что-то своё в innerHTML.

Ну есть ещё конечно DOM, но хотелось бы обойтись innerHTML.
ava
check | 20.08.2007, 21:36 #
Обидно... Ну ладно, DOM так DOM.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  Zeroglif   check   dXdYdZ
advanced
Submit