Динамический split

Dj_StelS

Гуру форума
Регистрация
9 Янв 2009
Сообщения
349
Реакции
80
Есть простейший код:
Код:
var str = '1|2|3|4|5{}6|7|8|9|10'; // эта переменная динамическая, может и больше будет таких конструкци, но они именно в таком виде
str = str.split('{}');
//str[0] = 1|2|3|4|5
//str[1] = 6|7|8|9|10
Так вот мне нужно str разделить еще и по |, т.е. сделать двумерный массив, пытался так:
Код:
for(i=0;i<=str.length; ++i){
str[i] =  str[i].split('|');
}
В консоле пишет Uncaught TypeError: Cannot call method 'split' of undefined
попробывал просто без цикла:
Код:
str[0] =  str[0].split('|');
str[0][0] = 1
str[0][1] = 2
т.е. все как нужно создалось..
но мне нужно именно динамически, т.к. сама переменная str динамическая
не пойму куда копать и что делать, помогите пожалуйста.
P.S. незнаю, важно или нет, но на странице используется jquery
За ранее спасибо.
 
Не очень аккуратно, но на быструю руку получилось вот так

Код:
var value = '1|2|3|4|5{}6|7|8|9|10';
 
value = value.split("{}");
for (var i = 0; i < value.length; i++)
{
var tmp = value[i].split("|");
value[i] = new Array();
for (var j = 0; j < tmp.length; j++)
value[i][j] = tmp[j];
}
console.log(value);

На выходе получаем:

[["1", "2", "3","4", "5"], ["6", "7", "8","9", "10"]]
 
Условие надо ставить строго меньше, так как длина на 1 больше, если индекс с 0 начинается
for(i=0;i<str.length; ++i)

Ваш совет абсолютно не решает проблему с которой столкнулся человек. Хотя и верное замечание.
 
Ваш совет абсолютно не решает проблему с которой столкнулся человек
чо? у человека только тут ошибка, и на выходе будет массив
[["1", "2", "3"], ["6", "7", "8" ]]
что ещё ему надо по вашему?
 
Не очень аккуратно, но на быструю руку получилось вот так

Код:
var value = '1|2|3|4|5{}6|7|8|9|10';
 
value = value.split("{}");
for (var i = 0; i < value.length; i++)
{
var tmp = value[i].split("|");
value[i] = new Array();
for (var j = 0; j < tmp.length; j++)
value[i][j] = tmp[j];
}
console.log(value);

На выходе получаем:

[["1", "2", "3","4", "5"], ["6", "7", "8","9", "10"]]
извеняюсь, всё заработало, но создается последний элемент пустой, как его удалить?
 
чо? у человека только тут ошибка, и на выходе будет массив
[["1", "2", "3"], ["6", "7", "8" ]]
что ещё ему надо по вашему?
Действительно... о.О
Прошу прощения, как то даже не осознал сразу что все было именно в этом. Хотя сам же точно так же написал ._.
 
var tmp = value.split("|"); вот на этой строке в консоле:
Uncaught TypeError: Cannot call method 'split' of undefined

Для просмотра ссылки Войди или Зарегистрируйся - это ваш вариант
Для просмотра ссылки Войди или Зарегистрируйся - это мой

Если в цикле правильно указать сравнение - ошибки быть не должно, как верно выше подметил KillDead
 
Для просмотра ссылки Войди или Зарегистрируйся - это ваш вариант
Для просмотра ссылки Войди или Зарегистрируйся - это мой

Если в цикле правильно указать сравнение - ошибки быть не должно, как верно выше подметил KillDead
ага, спасибо! мой вариант тоже заработал) Не думал что в js все на столько строго)
а как мне последний элемент в массиве удалить, который создается пустым?

Сорри если вопросы совсем глупые, но js знаю поверхностно


тему можно офф, нашел в интернете pop()
 
Если у вас создается пустой элемент в массиве это значит что вы не правильно указали проверку в цикле, могу поспорить что ошибка у вас в инкременте, используйте пост инкремент i++
 
Назад
Сверху