2017-03-05 6 views
-1

ich formatiert werden soll, wie dieVerwirrung über Array und Objekt in JavaScript

"attechent":[{ 
     "name":xyz, 
     field: [ 
      { title: 'a' }, 
      { title: 'b' } 
       ] 
     } 
    ] 

Code - >>

var field=[] 
var obj1={"title":"a"} 
var obj2={"title":"b"} 
field.push(obj1) 
field.push(obj2) 
console.log(field) 

var outerfiled={} 
outerfiled.field=field 
out.name="xyz" 
console.log(outerfiled) 

var list=[outerfiled] 
console.log(list) 

Problem wie mein Code wird nach Arbeitsausgabeformat zu wünschen übrig, aber nach
Ausgang ist [ { field: [ [Object], [Object] ], name: 'xyz' } ]

+0

, dass genau das, was ist 'console.log' tut. Tun Sie dies stattdessen: 'console.log (JSON.stringify (list))' – trincot

+1

Sieht korrekt aus. Vielleicht verwenden Sie 'console.log (JSON.stringify (list, null, 2))', um etwas zu haben, das Ihrem angeforderten Format ähnlicher ist. – Sirko

+0

Ich bin mir nicht sicher, ob Sie denken, dass Sie diese Struktur so bauen müssen; Schritt für Schritt, Eigentum für Eigentum. Weißt du, dass du folgendes tun kannst? 'Var list = [ \t { \t \t Name: 'xyz', \t \t Feld: [ \t \t \t {title: 'a'}, \t \t \t {title: 'b'} \t \t] \t} ] '* (die Zeilenumbrüche nicht in einem SO Kommentar angezeigt, aber Sie können sie sogar hinzufügen) * – Thomas

Antwort

1

Die Ausgabe, die Sie sehen, ist die Standard-Node-Ausgabe beim Drucken und Objekt. Es zeigt an, dass es ein Objekt hat, aber nicht im Detail ausgedruckt wird.

JSON.stringify können Sie Ihr Objekt wie erforderlich formatieren. Es benötigt drei Argumente - das zu formatierende Objekt, eine optionale Ersetzungsfunktion und eine optionale Einzugsebene. Beachten Sie, dass die Reihenfolge der Eigenschaften nicht garantiert ist.

In Ihrem Fall müssen Sie die Ersetzungsfunktion nicht verwenden, übergeben Sie also null als zweites Argument. Die erforderliche Einzugsebene ist 4 Leerzeichen. Sie können also die Zahl 4 als drittes Argument übergeben.

var field=[] 
 
var obj1={"title":"a"} 
 
var obj2={"title":"b"} 
 
field.push(obj1) 
 
field.push(obj2) 
 

 
var outerfiled={} 
 
outerfiled.field=field 
 
outerfiled.name="xyz" 
 

 
var list=[outerfiled] 
 

 
var result = {attechent: list} 
 
// Extra args for JSON.stringify: 
 
// no replacer function required - pass null, indent level of 4 spaces required 
 
console.log(JSON.stringify(result, null, 4))

+0

können Sie etwas erklären, was ist die Verwendung von null und 4 in JSON.stringify –

+0

diese ans gibt das richtige Format, aber was ist null und 4, wie du 4 auswählst. Antworten sollten verallgemeinert werden. –

+1

@AakashKag Die meisten Computersysteme haben "Dokumentation", die Sie konsultieren können, und das ist effizienter als nach SO fragen. In diesem Fall googlen Sie nach "JSON.stringify", um herauszufinden, was die Parameter sind. –

0

Sie brauchen die richtige Variable für den Namen.

outerfiled.name = "xyz"; 
// ^^^^^^^ 

und später eine Zuordnung zu dem Ergebnis, wie

var result = { attechent: list }; 

var field = []; 
 
var obj1 = { title: "a" }; 
 
var obj2 = { title: "b" }; 
 
field.push(obj1); 
 
field.push(obj2); 
 

 
var outerfiled = {}; 
 
outerfiled.field = field; 
 
outerfiled.name = "xyz"; 
 

 
var list = [outerfiled]; 
 
var result = { attechent: list }; 
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

console.log druckt nicht das ganze Objekt. Sie können util.inspect() verwenden, wenn Sie das gesamte Objekt drucken möchten. Hier ist der Code

+0

diese ausgegeben kommt mit util {attechment: '[{field: [{title: \' a \‘}, {title: \ 'b \'} ], Name: \ 'xyz \'}] '} –

+0

Ich stimme zu, object Problem wird von json sowie util zu lösen. Jetzt ist meine Ausgabe wie [{field: [{title: 'a'}, {title: 'b'}], Name: 'xyz'}].aber für Anhang var outerobj = {"attachment": Liste} console.log (outerobj) –