2015-08-14 16 views
1

См. Прилагаемый скриншот. См. Свойство pendingApp объекта. когда я отлаживаю eclipse, тогда pendingApp отображает массив объекта, что правильно! Но когда я буду JSON.stringify(object), то покажу мне пустой массив. Eclipse ImageСтранное поведение javascript

Terminal Image

Пожалуйста, дайте мне знать причину такого поведения. Я думаю, что я не знаю, с какой мыслью/концепцией Java-Script? : P :)

Когда я сохраню этот объект в БД, тогда будет сохранен пустой массив pendingApp !!

var pending_app = []; 
var new_record = {"pendingApp" : [], "installedApp" :[] }; 
....SOME CODE+conditions HERE.... 
pending_app[appId] = {'action' : action }; 
new_record.pendingApp = pending_app; 
// create app-config data 
return app_model.create(new_record); //will return promise object 
+0

You объект не может быть stringifyable – Hacketo

+0

Его просто создан вручную объектов JavaScript и почему бы не сохранить его в БД ??? –

+0

Подождите, пока ваш массив заполнится. Вы используете некоторые асинхронные функции, не так ли? – Bergi

ответ

1

Это не странное поведение, но общая ошибка с использованием Array для хранения данных ключ-значение.

Короткий ответ: Использование буквальным объекта для хранения этих данных


В то время как вы можете добавить свойства на каждом объектов в Javascript, вы не можете перебирать их с механизмами в массиве по умолчанию

for (var i = 0; i < array.length; i++){} 
array.forEach(); 

Простая демонстрация:

var array = []; 
array["anId"] = 1; 
array.length; // 0 

array[4294967295] = 1; // Indice >= unsigned 32-bit Max Value 
array.length; // 0 
array[4294967295]; // 1 

Так JSON.stringify с ECMAScript 5 Specification будет использовать механизм Array для перебора всех элементов и ничего не найдет.

В отличие от Objects, что вы можете перечислить свойства с

Object.keys(array); // ["anId"] 
Смежные вопросы