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

Тема в разделе "JavaScript", создана пользователем Dj_StelS, 12 фев 2012.

Модераторы: ZiX
  1. Dj_StelS

    Dj_StelS

    Регистр.:
    9 янв 2009
    Сообщения:
    349
    Симпатии:
    79
    Есть простейший код:
    Код:
    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
    За ранее спасибо.
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    562

    Условие надо ставить строго меньше, так как длина на 1 больше, если индекс с 0 начинается
    for(i=0;i<str.length; ++i)
     
    Dj_StelS нравится это.
  3. morine

    morine Создатель

    Регистр.:
    11 фев 2012
    Сообщения:
    28
    Симпатии:
    12
    Не очень аккуратно, но на быструю руку получилось вот так

    Код:
    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"]]
     
    Dj_StelS нравится это.
  4. morine

    morine Создатель

    Регистр.:
    11 фев 2012
    Сообщения:
    28
    Симпатии:
    12
    Ваш совет абсолютно не решает проблему с которой столкнулся человек. Хотя и верное замечание.
     
  5. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    562
    чо? у человека только тут ошибка, и на выходе будет массив
    [["1", "2", "3"], ["6", "7", "8" ]]
    что ещё ему надо по вашему?
     
    Dj_StelS нравится это.
  6. Dj_StelS

    Dj_StelS

    Регистр.:
    9 янв 2009
    Сообщения:
    349
    Симпатии:
    79
    извеняюсь, всё заработало, но создается последний элемент пустой, как его удалить?
     
  7. morine

    morine Создатель

    Регистр.:
    11 фев 2012
    Сообщения:
    28
    Симпатии:
    12
    Действительно... о.О
    Прошу прощения, как то даже не осознал сразу что все было именно в этом. Хотя сам же точно так же написал ._.
     
  8. morine

    morine Создатель

    Регистр.:
    11 фев 2012
    Сообщения:
    28
    Симпатии:
    12
    http://d.pr/Mlwk - это ваш вариант
    http://d.pr/4H6N - это мой

    Если в цикле правильно указать сравнение - ошибки быть не должно, как верно выше подметил KillDead
     
  9. Dj_StelS

    Dj_StelS

    Регистр.:
    9 янв 2009
    Сообщения:
    349
    Симпатии:
    79
    ага, спасибо! мой вариант тоже заработал) Не думал что в js все на столько строго)
    а как мне последний элемент в массиве удалить, который создается пустым?

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


    тему можно офф, нашел в интернете pop()
     
  10. morine

    morine Создатель

    Регистр.:
    11 фев 2012
    Сообщения:
    28
    Симпатии:
    12
    Если у вас создается пустой элемент в массиве это значит что вы не правильно указали проверку в цикле, могу поспорить что ошибка у вас в инкременте, используйте пост инкремент i++
     
    Dj_StelS нравится это.