Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.10.2016, 12:39
Аспирант
Отправить личное сообщение для Benos Посмотреть профиль Найти все сообщения от Benos
 
Регистрация: 09.01.2012
Сообщений: 48

Arr.push() и for...in (затирает предыдущие элементы)
Добрый день!
Возник какой то косяк с Arr.push() и for ... in.
var sysData = { 
        		   "53733202":["53733202",["5800", "203"]],
        		   "53990478":["53990478",["5800", "203"]]
       		  };
                  
var bodyArrJSON = [];
var sesID = 111;

goGo();

function getBody(){
      var bodyTMP = {};
      var ctrl = 'ID';
      var act =  'addItem';
      bodyArrJSON[1] = [];
      bodyArrJSON[0] = '/api/?c='+ctrl+'&a='+act+'&t';
      for(bodyKey in sysData){
          bodyTMP.list = sysData[bodyKey][1];  
          bodyTMP.itemId = sysData[bodyKey][0];
          bodyArrJSON[1].push({ controller: ctrl, action: act, params: bodyTMP, session: sesID });
          alert("Тело[i] => "+JSON.stringify(bodyArrJSON[1]));
      }
      alert("Общее тело => "+JSON.stringify(bodyArrJSON[1]));
}


function goGo(){
  alert("Исходное тело => "+JSON.stringify(sysData));
  getBody();
}


собственно есть объект с данными sysData(в реальных условиях динамический - количество элементов любое). Из этих данных собираю тело JSON запроса. Причем собираю их во временный массив, что бы в дальнейшем последовательным перебором посылать POST запросы(одна строка, один запрос).

временный массив с телами запрос имеет вид:
bodyArrJSON = ['элемент URL', ['тело1', 'тело2', 'телоN']];


По идеи должно на выходе быть так:
bodyArrJSON = [
 '/api/?c=ID&a=addItem&t', 
 [{"controller": "ID", "action": "addItem", "params": { "list": ["5800", "203"], "itemId": "53733202" , "session": "111"},
  {"controller": "ID", "action": "addItem", "params": { "list": ["5800", "203"], "itemId": "53990478" , "session": "111"}]
];

по факту слушающий элемент затирает предыдущие и в итоговом массиве идут одинаковые элементы.
https://jsfiddle.net/Benos/yfhqmkn6/

Подскажите пожалуйста в чем дело. Что то в голову не приходят другие варианты перебора...
если только for (i=0; i<...;i++) с последующим bodyArrJSON[1][i] = ... но как то громоздко выходит
Ответить с цитированием
  #2 (permalink)  
Старый 15.10.2016, 12:44
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от Benos
bodyArrJSON[1] = [];

При чем тогда push? При каждом вызове переменная инициализируется. Ну, не переменная, переменная элемент массива, но ты ж его именно чекаешь в алерте.

Может быть и не оно, но у тебя какие-то загадочные кустарные заморочки, одному тебе известные видимо, поскольку с ТЗ код не совпадает.

Последний раз редактировалось warren buffet, 15.10.2016 в 12:47.
Ответить с цитированием
  #3 (permalink)  
Старый 15.10.2016, 12:53
Аспирант
Отправить личное сообщение для Benos Посмотреть профиль Найти все сообщения от Benos
 
Регистрация: 09.01.2012
Сообщений: 48

Вопрос снят... косяк нашел
обнуление объекта тела bodyTMP в цикл перебора.
function getBody(){
      var ctrl = 'ID';
      var act =  'addItem';
      bodyArrJSON[1] = [];
      bodyArrJSON[0] = '/api/?c='+ctrl+'&a='+act+'&t';
      for(bodyKey in sysData){
          var bodyTMP = {};
          bodyTMP.list = sysData[bodyKey][1];  
          bodyTMP.itemId = sysData[bodyKey][0];
          bodyArrJSON[1].push({ contr: ctrl, act: act, pars: bodyTMP, session: sesID });
          alert("Тело[i] => "+JSON.stringify(bodyArrJSON[1]));
      }
      alert("Общее тело => "+JSON.stringify(bodyArrJSON[1]));
}


три дня сидел... разные варианты перебирал...

Последний раз редактировалось Benos, 15.10.2016 в 12:57.
Ответить с цитированием
  #4 (permalink)  
Старый 15.10.2016, 12:57
Аспирант
Отправить личное сообщение для Benos Посмотреть профиль Найти все сообщения от Benos
 
Регистрация: 09.01.2012
Сообщений: 48

warren buffet,
инициируется при первом вызове функции getBody()
так как sysData подгружается с сервера (динамически) что бы не было "хвостов" специально обнуляю bodyArrJSON[1] = [];
Ответить с цитированием
  #5 (permalink)  
Старый 16.10.2016, 14:53
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Кажется понял откуда куст растет. Ты кустарно делаешь json.
Ответить с цитированием
Ответ



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

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