Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Конвертация в массив (https://javascript.ru/forum/misc/55749-konvertaciya-v-massiv.html)

Alex1233 12.05.2015 21:24

Конвертация в массив
 
Блин, разобрался с одной проблемой - теперь появилась другая =(

В кратце, у меня есть массив в функции такого вида:

var allVal={t1960:[7500,0,2],t412:[100,0,0],t2537:[11,333,1]};


Это тестовый массив, прописанный вручную и с ним все ок, скрипт работает как надо. Но, на "живой работе", он должен генерироваться и обрабатываться автоматически, для этого есть функция, которая генерирует его в таком вот виде (без фигурных скобок):

t1960:[7500,0,2],t412:[100,0,0],t2537:[11,333,1]


По итогу, я уже не могу к нему обращаться как к массиву ("allVal[t1960][0]"), выдает ошибку =(

Пробовал по всякому обрамлять его фигурными скобками, ничего не работает... =((( Получается уже не массив а строка.

Подскажите, кто знает, как добавить к результату фигурные скобки чтобы получился именно массив?

Alex1233 12.05.2015 21:31

Другими словами, в кеш юзеру у меня записывается такая вещь:

t1960:[7500,0,2],t412:[100,0,0],t2537:[11,333,1]


А скрипт, настроен (и работает) на работу с таким видом (фигурные скобки):

{t1960:[7500,0,2],t412:[100,0,0],t2537:[11,333,1]}


Вопрос: Как данные взятые из кеша (первый пример), превратить в рабочий массив (второй пример)? У меня получается преобразовать данные из 1 вида, во второй, но они уже не работают так как задумано (точнее вообще не работают) =(

рони 12.05.2015 21:54

Alex1233,
а что мешает сохранить обьект в кеше?

Alex1233 12.05.2015 22:01

Цитата:

Сообщение от рони (Сообщение 370457)
Alex1233,
а что мешает сохранить обьект в кеше?

Да я еще мало опытный в этом деле, можно сказать все наугад делаю.. :-?

У меня массив этот набирается через перебор всех ячеек на странице, как его начать и закончить теми же фигурными скобками (чтобы все работало), ума не приложу...


$('[row="view"],[row="comm"],[row="rating"]').each(function(){
               
    		var id=$(this).parents().attr('id');
            var val=$(this).text();
                        
            if(allVal[id] && val>allVal[id][i]){
                $(this).css('fontWeight','bold');                
                $(this).attr('title','+'+(val-allVal[id][i]));
            }
            
            if(i<2){
                newVal.push(val);                
                i++;
            } else {
                newVal.push(val);
                newVals.push(id+':['+newVal+']');
                newVal=[];
                i=0;
            };        
            
        });

Alex1233 12.05.2015 22:17

По сути, ведь если удастся передать рабочий вариант в кэш, то ничего не мешает по той же аналогии преобразовать текущий не рабочий вариант, разве нет?

Тут именно вся сложность, как сделать из этого (что получается автоматом), этот самый, рабочий объект.

рони 12.05.2015 22:39

Alex1233,
:-?

Alex1233 12.05.2015 23:10

Переделал вот так:

$(document).ready(function(){
     
     var allVal = $.cookie("nnn"); 
     
     if(!allVal){var allVal={};}
             
        i=0;
        
        var newVal = [];
        var newVals = {};
        
        $('[row="view"],[row="comm"],[row="rating"]').each(function(){
               
    		var id=$(this).parents().attr('id');
            var val=$(this).text();
                        
            if(allVal[id] && val>allVal[id][i]){
                $(this).css('fontWeight','bold');                
                $(this).attr('title','+'+(val-allVal[id][i]));
            }
            
            newVal.push(val);
            
            if(i<2){               
                i++;
            } else {
                newVals.id = [newVal];
                //newVals.push(id+':['+newVal+']');
                newVal=[];
                i=0;
            };        
            
        });      
     
         
     $.cookie("nnn",newVals, { expires: 365, path: '/' });
     
      
          
 })


Не работает =( Помогите кто нибудь..

рони 12.05.2015 23:30

Alex1233,
https://learn.javascript.ru/json

Alex1233 13.05.2015 01:30

Цитата:

Сообщение от рони (Сообщение 370485)

Спасибо за подсказки, вроде похоже на то что нужно (хотя и странно что так все сложно, я думал JSON это из разряда AJAX..), но у меня почему то все равно ничего не работает (все делал по инструкции)..


// Задаем строку по формату, для проверки (как будто взяли ее из кеша)
     var allVal="t1960:[7500,0,2],t412:[100,0,0],t2537:[11,333,1]";

     // Приводим ее в формат JSON
     allVal='{'+allVal+'}';   

     // Обрабатываем при помощи JSON в массив/объект
     allVal=JSON.parse(allVal);
     

     // Проверяем наш массива на работоспособность... Но тщетно...
     alert(allVal[t1960][0]);

kichSman 13.05.2015 02:06

// Задаем строку по формату, для проверки (как будто взяли ее из кеша)
     var allVal='"t1960":[7500,0,2],"t412":[100,0,0],"t2537":[11,333,1]';

     // Приводим ее в формат JSON
     allVal='{'+allVal+'}';   

     // Обрабатываем при помощи JSON в массив/объект
     allVal=JSON.parse(allVal);


Для JSON своя атмосфера с кавычками


Часовой пояс GMT +3, время: 19:53.