Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.05.2015, 21:24
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

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

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

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]"), выдает ошибку =(

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

Подскажите, кто знает, как добавить к результату фигурные скобки чтобы получился именно массив?
Ответить с цитированием
  #2 (permalink)  
Старый 12.05.2015, 21:31
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

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

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 вида, во второй, но они уже не работают так как задумано (точнее вообще не работают) =(
Ответить с цитированием
  #3 (permalink)  
Старый 12.05.2015, 21:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Alex1233,
а что мешает сохранить обьект в кеше?
Ответить с цитированием
  #4 (permalink)  
Старый 12.05.2015, 22:01
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

Сообщение от рони Посмотреть сообщение
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;
            };        
            
        });
Ответить с цитированием
  #5 (permalink)  
Старый 12.05.2015, 22:17
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

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

Тут именно вся сложность, как сделать из этого (что получается автоматом), этот самый, рабочий объект.
Ответить с цитированием
  #6 (permalink)  
Старый 12.05.2015, 22:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Alex1233,
Ответить с цитированием
  #7 (permalink)  
Старый 12.05.2015, 23:10
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

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

$(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: '/' });
     
      
          
 })


Не работает =( Помогите кто нибудь..
Ответить с цитированием
  #8 (permalink)  
Старый 12.05.2015, 23:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Alex1233,
https://learn.javascript.ru/json
Ответить с цитированием
  #9 (permalink)  
Старый 13.05.2015, 01:30
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

Сообщение от рони Посмотреть сообщение
Alex1233,
https://learn.javascript.ru/json
Спасибо за подсказки, вроде похоже на то что нужно (хотя и странно что так все сложно, я думал 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]);
Ответить с цитированием
  #10 (permalink)  
Старый 13.05.2015, 02:06
Аспирант
Отправить личное сообщение для kichSman Посмотреть профиль Найти все сообщения от kichSman
 
Регистрация: 16.10.2009
Сообщений: 69

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

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

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


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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в шаблоне диррективы узнать массив это или строка? delias Angular.js 1 18.03.2014 07:33
Отправить, когда четко соберется массив vas88811 Events/DOM/Window 11 26.02.2014 21:55
Массив объектов doox911 Библиотеки/Тулкиты/Фреймворки 6 16.01.2014 22:36
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
Подскажите, как вернуть js-скрипт массив Polkan AJAX и COMET 18 30.04.2010 23:30