簡體   English   中英

為什么我無法在Javascript上控制台記錄/字符串化整個數組?

[英]Why can't I console log/stringify a whole array on Javascript?

所以我很努力地嘗試在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);
});

數組實際內容的一些示例: 在此處輸入圖片說明在此處輸入圖片說明

提前致謝。

我假設您將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"]}

您嘗試執行的操作完全沒問題,沒有理由對復雜對象進行字符串化

還值得注意的是它不是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"}]}

http://jsfiddle.net/or6gj92y/

提示:當我遇到問題時,我會嘗試在jsfiddle.net或plunker之類的工具中進行小版本的“健全性檢查”,希望對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM