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, время: 17:49. |