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] = ... но как то громоздко выходит :( |
Цитата:
При чем тогда push? При каждом вызове переменная инициализируется. Ну, не переменная, переменная элемент массива, но ты ж его именно чекаешь в алерте. Может быть и не оно, но у тебя какие-то загадочные кустарные заморочки, одному тебе известные видимо, поскольку с ТЗ код не совпадает. |
Вопрос снят... косяк нашел
обнуление объекта тела 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])); } три дня сидел... разные варианты перебирал... :) |
warren buffet,
инициируется при первом вызове функции getBody() так как sysData подгружается с сервера (динамически) что бы не было "хвостов" специально обнуляю bodyArrJSON[1] = []; |
Кажется понял откуда куст растет. Ты кустарно делаешь json.
|
Часовой пояс GMT +3, время: 07:01. |