所以我在努力尝试在Javascript上访问一个复杂的数组。
简单来说,我有一个像这样的数组:
globalForm['prop1'] = anotherArray[];
globalForm['prop2'] = yetAnotherArray[];
如果我尝试:
console.log(globalForm);
//-or-
JSON.stringify(globalForm)
我得到一个空的Array []或一个空的JSON对象。
但如果我这样做:
console.log(globalForm['prop1']);
//-or-
JSON.stringify(globalForm['prop1'])
我实际上得到了它的内容。
我在尝试记录或整理整个数组时做错了什么/傻了吗?我想要实现的是从该数组创建一个复杂的JSON对象。
这是我的实际代码: 对于prop1:
var completedWeights = [];
globalForm['CompletedFormPhoto'] = images;
var radio_groups = {}
$(".weightRadio:radio").each(function(){
radio_groups[this.name] = true;
});
for(group in radio_groups){
thisGroup = $(".weightRadio:radio[name="+group+"]:checked");
if_checked = !!thisGroup.length;
completedWeights.push({'IdWeight':thisGroup.attr('name'), 'Value':thisGroup.val()});
}
globalForm['CompletedFormWeight'] = completedWeights;
对于prop2(这实际上在生成prop1之前执行):
var fileInput = document.getElementById('fileInput');
var fileDisplayArea = document.getElementById('fileDisplayArea');
fileInput.addEventListener('change', function(e) {
var idImg = Date.now();
var currentImageObj =[];
var file = fileInput.files[0];
var imageType = /image.*/;
var addedImage = document.createElement('div');
addedImage.className = 'addedImage';
if (file.type.match(imageType)) {
var reader = new FileReader();
reader.onload = function(e) {
var img = new Image();
img.src = reader.result;
img.id = idImg;
addedImage.appendChild(img);
var ind = img.src.indexOf(',/9j/') + 5;
currentImageObj["Photo"] = img.src.substr(ind);
images[idImg] = currentImageObj;
}
reader.readAsDataURL(file);
console.log(images);
} else {
addedImage.innerHTML = "File not supported!";
}
addComment = document.createElement('a');
addComment.className = "btn btn-default btn-block addComment";
addComment.setAttribute("data-toggle", "modal");
addComment.setAttribute("data-target", "#myModal");
addComment.text = "Agregar Comentario";
addComment.id = idImg;
addedImage.appendChild(addComment);
fileDisplayArea.appendChild(addedImage);
});
数组实际内容的一些示例:
提前致谢。
答案 0 :(得分:1)
我假设您将globalForm
创建为数组。 JavaScript中的数组只能理解整数索引。由于它们仍然是对象,您当然可以为它们命名属性,但这些属性不会填充数组。 JavaScript中点符号和括号索引的等价可能会误导你。
所以你要么只使用这样的数字:
globalForm=[]
globalForm[1]=["whatever"]
globalForm[2]=["etc"]
console.log(globalForm)
=> [undefined, ["whatever"], ["etc"]]
(请注意,数组索引从零开始)
...或者,如果您正在寻找更像名称和值之间的映射的东西,您应该只使用(非数组)对象:
globalForm={}
globalForm["prop1"]=["whatever"]
globalForm["prop2"]=["etc"]
console.log(globalForm)
=> {prop1: ["whatever"], prop2:["etc"]}
答案 1 :(得分:0)
你要做的就是完全没有理由将字符串化为复杂对象
另外值得注意的是它不是一个json对象,它是一个javascript对象,或一个描述对象的json字符串。
看看这个:
var object = {
prop1 : 'what ever',
prop2 : 'whatever to',
prop3 : [
{a : "a", b: 'b' },
{a : "a", b: [
{a : "a", b: 'b' },
{a : "a", b: "b" },
{a : "a", b: 'b' }
]},
{a : "a", b: 'b' }
]
};
console.log(JSON.stringify(object));
// outPuts : {"prop1":"what ever","prop2":"whatever to","prop3":[{"a":"a","b":"b"},{"a":"a","b":[{"a":"a","b":"b"},{"a":"a","b":"b"},{"a":"a","b":"b"}]},{"a":"a","b":"b"}]}
提示:当我遇到问题时,我会尝试使用jsfiddle.net或plunker之类的小版本进行"健全检查"希望有所帮助