Conversione di un oggetto in una stringa


975

Come posso convertire un oggetto JavaScript in una stringa?

Esempio:

var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)

Produzione:

Object {a = 1, b = 2} // output leggibile molto piacevole :)
Item: [oggetto object] // nessuna idea di cosa ci sia dentro :(


7
Converti in stringa a quale scopo? Vuoi dire serializzare in modo da poter costruire l'oggetto in seguito dalla stringa? O solo per la visualizzazione?
Shadow Wizard è Ear For You

19
L'autore è passato da anni, ma leggendo in mente, dopo anni, immagino, il punto di ingresso per il problema era console.log (obj), che mostrava l'oggetto con proprietà, mentre console.log ('obj:' + obj ) funziona diversamente in modo disorientante.
Danubian Sailor,

2
semplicemente non posso applicare aggiungere due oggetti, se potessimo farlo non ci sarebbero differenze nel tipo di valore e nel tipo di riferimento.
Nishant Kumar,

12
var o = {a: 1, b: 2}; console.log ('Item:' + JSON.stringify (o))
Nishant Kumar

22
Se è per la console, consiglierei di farlo console.log("Item", obj);. Non c'è bisogno di nulla di complicato.
soktinpk,

Risposte:


1333

Consiglierei di usare JSON.stringify, che converte l'insieme delle variabili nell'oggetto in una stringa JSON. La maggior parte dei browser moderni supporta questo metodo in modo nativo, ma per quelli che non lo fanno, puoi includere una versione JS :

var obj = {
  name: 'myObj'
};

JSON.stringify(obj);

7
Per riferimento IE6 e 7 non supportano questo. IE6 non è un grosso problema a causa di pochissimi utenti e una campagna attiva per ucciderlo ... ma ci sono ancora parecchi utenti IE7 là fuori (dipende dalla tua base di utenti).
MikeMurko,

30
Viene visualizzato il messaggio "Uncaught TypeError: conversione di una struttura circolare in JSON". Anche se c'è un riferimento circolare, mi piacerebbe comunque vedere una rappresentazione in forma di stringa del mio oggetto. Cosa posso fare?
Pascal Klein,

26
Questo non funziona se l'oggetto ha una proprietà di funzione, ad esempio: foo: function () {...}.
Brock Adams,

2
Il collegamento alla libreria JSON non funziona se si fa clic da StackOverflow. Copialo e incollalo nella barra degli indirizzi.
f.ardelian,

1
È possibile utilizzare JSON.stringify(obj, null, 2);per un output più bello.
l.poellabauer,

126

Usa la funzione String () di JavaScript

 String(yourobject); //returns [object Object]

o stringify ()

JSON.stringify(yourobject)

28
var foo = {bar: 1}; String (foo); -> "[oggetto oggetto]"
Anti Veeranna,

1
var foo = {bar: 1}; String (foo [ 'bar']); -> "1"
Vikram Pote,

3
Se vuoi l'intero oggetto come stringa usa JSON.stringify (pippo)
Vikram Pote

8
JSON.stringify(yourobject)cameriera la mia giornata!
Neurotrasmettitore

1
@TranslucentCloud * made
Parampal Pooni il

87

Certo, per convertire un oggetto in una stringa, devi usare il tuo metodo, come ad esempio:

function objToString (obj) {
    var str = '';
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            str += p + '::' + obj[p] + '\n';
        }
    }
    return str;
}

In realtà, quanto sopra mostra solo l'approccio generale; potresti voler usare qualcosa come http://phpjs.org/functions/var_export:578 o http://phpjs.org/functions/var_dump:604

oppure, se non si utilizzano metodi (funzioni come proprietà dell'oggetto), è possibile utilizzare il nuovo standard (ma non implementato nei browser meno recenti, sebbene sia possibile trovare un'utilità che li aiuti anche per loro), JSON .stringify (). Ma ancora una volta, ciò non funzionerà se l'oggetto utilizza funzioni o altre proprietà che non sono serializzabili su JSON.


78

Per farla semplice console, puoi semplicemente usare una virgola anziché una +. Il +cercherà di convertire l'oggetto in una stringa, mentre la virgola verrà visualizzato separatamente nella console.

Esempio:

var o = {a:1, b:2};
console.log(o);
console.log('Item: ' + o);
console.log('Item: ', o);   // :)

Produzione:

Object { a=1, b=2}           // useful
Item: [object Object]        // not useful
Item:  Object {a: 1, b: 2}   // Best of both worlds! :)

Riferimento: https://developer.mozilla.org/en-US/docs/Web/API/Console.log


Greate solution! Ma potresti dirmi cosa succede dietro le quinte quando fai semplicemente questo console.log(o):? Dal momento che se si tenta di registrare un oggetto aggiunto a una stringa, in realtà chiama toString()l'oggetto.
Gocy015,

1
console.logalla fine chiama qualcosa chiamato ciò Printerche la specifica nota: "Il modo in cui l'implementazione stampa dipende dall'implementazione" - il che significa che ogni browser può farlo in modo diverso (vedi console.spec.whatwg.org/#printer ). Firefox visualizzerà gli oggetti come una stringa, ma ben colorati. Chrome mostrerà l'oggetto come un gruppo interattivo che puoi espandere per vedere le proprietà. Provaci!
Luca

2
Trucco molto bello e probabilmente perfetto per i browser web moderni, ma non è affidabile al 100% per tutte le implementazioni JS. ad es. in Qt QML, che implementa un motore JS, l'output di console.log('Item: ', o);è fermo Item: [object Object].
Paul Masri-Stone,

Invece di console.logte puoi usare console.dir(o)per stampare l'oggetto javascript invece di stamparlo come una stringa. Negli strumenti di sviluppo ciò consente di aprire l'oggetto e di controllare tutte le proprietà, anche le matrici. (vedi: developer.mozilla.org/de/docs/Web/API/Console/dir )
EagleT

37

MODIFICA Non utilizzare questa risposta in quanto non funziona in Internet Explorer. Usa la soluzione Gary Chambers .

toSource () è la funzione che stai cercando che la scriverà come JSON.

var object = {};
object.first = "test";
object.second = "test2";
alert(object.toSource());

6
Sebbene sia conveniente per il debug in Firefox, toSource()non funziona in IE.
Brett Zamir,

4
toSource()non è uno standard riconosciuto, quindi non può essere garantito che sia supportato in tutti i browser.
Gary Chambers,

11
Ah, grazie per averlo sottolineato. Lascerò la mia risposta qui per gli altri che non ne sono consapevoli.
Gazler,

Vorrei poterti votare di più, in quanto si tratta di una soluzione geniale per gli ambienti con JavaScript (ma il registro della console è scomodo / impossibile da accedere).
Zack Morris,

È possibile fornire un polypill a Source: github.com/oliver-moran/toSource.js/blob/master/toSource.js
roland

32

Un'opzione :

console.log('Item: ' + JSON.stringify(o));

o è stampato come una stringa

Un'altra opzione (come sottolineato da soktinpk nei commenti), e meglio per il debug della console IMO:

console.log('Item: ', o);

o viene stampato come un oggetto, che è possibile eseguire il drill down se si disponessero di più campi


22

Nessuna delle soluzioni qui ha funzionato per me. JSON.stringify sembra essere quello che dicono molte persone, ma interrompe le funzioni e sembra piuttosto rotto per alcuni oggetti e array che ho provato durante il test.

Ho creato la mia soluzione che funziona almeno in Chrome. Pubblicandolo qui in modo che chiunque lo cerchi su Google possa trovarlo.

//Make an object a string that evaluates to an equivalent object
//  Note that eval() seems tricky and sometimes you have to do
//  something like eval("a = " + yourString), then use the value
//  of a.
//
//  Also this leaves extra commas after everything, but JavaScript
//  ignores them.
function convertToText(obj) {
    //create an array that will later be joined into a string.
    var string = [];

    //is object
    //    Both arrays and objects seem to return "object"
    //    when typeof(obj) is applied to them. So instead
    //    I am checking to see if they have the property
    //    join, which normal objects don't have but
    //    arrays do.
    if (typeof(obj) == "object" && (obj.join == undefined)) {
        string.push("{");
        for (prop in obj) {
            string.push(prop, ": ", convertToText(obj[prop]), ",");
        };
        string.push("}");

    //is array
    } else if (typeof(obj) == "object" && !(obj.join == undefined)) {
        string.push("[")
        for(prop in obj) {
            string.push(convertToText(obj[prop]), ",");
        }
        string.push("]")

    //is function
    } else if (typeof(obj) == "function") {
        string.push(obj.toString())

    //all other values can be done with JSON.stringify
    } else {
        string.push(JSON.stringify(obj))
    }

    return string.join("")
}

EDIT: So che questo codice può essere migliorato, ma non sono mai riuscito a farlo. L'utente andrey ha suggerito un miglioramento qui con il commento:

Ecco un po 'di codice modificato, che può gestire' null 'e' undefined ', e inoltre non aggiungere virgole eccessive.

Usalo a tuo rischio e pericolo poiché non l'ho verificato affatto. Sentiti libero di suggerire eventuali miglioramenti aggiuntivi come commento.


Vi manca un po '}' s
dacopenhagen

2
Codice molto bello, ma c'è un finale ,alla fine di ogni oggetto / array.
NiCk Newman,

questa è la risposta migliore
Roman

20

Se stai solo trasmettendo alla console, puoi usare console.log('string:', obj). Nota la virgola .


Ciò pone problemi in scenari in cui AJAX e differiti entrano in gioco - l'output da console.logviene spesso visualizzato dopo che AJAX ha terminato di fornire all'array i dati in parallelo, il che porta a risultati fuorvianti. In questi casi la clonazione o la serializzazione di oggetti è la strada da percorrere: poiché abbiamo registrato oggetti duplicati, anche quando AJAX termina il suo lavoro, riempirà "vecchi" dati.
r-

18

Nel caso in cui si sappia che l'oggetto è solo un valore booleano, data, stringa, numero ecc ... La funzione String () di javascript funziona perfettamente. Di recente l'ho trovato utile nel trattare i valori provenienti dalla funzione $ .each di jquery.

Ad esempio, quanto segue converte tutti gli elementi in "valore" in una stringa:

$.each(this, function (name, value) {
  alert(String(value));
});

Maggiori dettagli qui:

http://www.w3schools.com/jsref/jsref_string.asp


Oppurevar my_string = ''+value+'';
John Magnolia,

1
Per me va bene. Preferisco questa soluzione perché non userei un plugin per un compito così semplice.
Tillito,

15
var obj={
name:'xyz',
Address:'123, Somestreet'
 }
var convertedString=JSON.stringify(obj) 
 console.log("literal object is",obj ,typeof obj);
 console.log("converted string :",convertedString);
 console.log(" convertedString type:",typeof convertedString);

12

Stavo cercando questo, e ho scritto un profondo ricorsivo con rientro:

function objToString(obj, ndeep) {
  if(obj == null){ return String(obj); }
  switch(typeof obj){
    case "string": return '"'+obj+'"';
    case "function": return obj.name || obj.toString();
    case "object":
      var indent = Array(ndeep||1).join('\t'), isArray = Array.isArray(obj);
      return '{['[+isArray] + Object.keys(obj).map(function(key){
           return '\n\t' + indent + key + ': ' + objToString(obj[key], (ndeep||1)+1);
         }).join(',') + '\n' + indent + '}]'[+isArray];
    default: return obj.toString();
  }
}

Utilizzo: objToString({ a: 1, b: { c: "test" } })


si noti che se si desidera impedire loop infiniti per oggetti con riferimenti circolari, è possibile aggiungere if(ndeep > MAX_DEPTH_LEVEL){ return '...'; }la funzione, con MAX_DEPTH_LEVEL come numero massimo di layer oggetto scelti per scavare.
SylvainPV

11

Se vuoi solo vedere l'oggetto per il debug, puoi usare

var o = {a:1, b:2} 
console.dir(o)

9

1.

JSON.stringify(o);

Articolo: {"a": "1", "b": "2"}

2.

var o = {a:1, b:2};
var b=[]; Object.keys(o).forEach(function(k){b.push(k+":"+o[k]);});
b="{"+b.join(', ')+"}";
console.log('Item: ' + b);

Articolo: {a: 1, b: 2}


1
Sarebbe meglio se prendessi in considerazione l'aggiunta di maggiori dettagli sulla tua risposta.
Harun Diluka Heshan

8

I metodi JSON sono abbastanza inferiori al primitivo .toSource () del motore Gecko.

Vedere la risposta dell'articolo SO per i test di confronto.

Inoltre, la risposta sopra si riferisce a http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-386109.html che, come JSON, (che l'altro articolo http: // www.davidpirek.com/blog/object-to-string-how-to-deserialize-json utilizza tramite "Codice sorgente codifica JSON ExtJs" ) non è in grado di gestire riferimenti circolari ed è incompleto. Il codice seguente mostra i suoi limiti (spoof) (corretti per gestire matrici e oggetti senza contenuto).

( collegamento diretto al codice in //forums.devshed.com/ ... / tosource-with-arrays-in-ie-386109 )

javascript:
Object.prototype.spoof=function(){
    if (this instanceof String){
      return '(new String("'+this.replace(/"/g, '\\"')+'"))';
    }
    var str=(this instanceof Array)
        ? '['
        : (this instanceof Object)
            ? '{'
            : '(';
    for (var i in this){
      if (this[i] != Object.prototype.spoof) {
        if (this instanceof Array == false) {
          str+=(i.match(/\W/))
              ? '"'+i.replace('"', '\\"')+'":'
              : i+':';
        }
        if (typeof this[i] == 'string'){
          str+='"'+this[i].replace('"', '\\"');
        }
        else if (this[i] instanceof Date){
          str+='new Date("'+this[i].toGMTString()+'")';
        }
        else if (this[i] instanceof Array || this[i] instanceof Object){
          str+=this[i].spoof();
        }
        else {
          str+=this[i];
        }
        str+=', ';
      }
    };
    str=/* fix */(str.length>2?str.substring(0, str.length-2):str)/* -ed */+(
        (this instanceof Array)
        ? ']'
        : (this instanceof Object)
            ? '}'
            : ')'
    );
    return str;
  };
for(i in objRA=[
    [   'Simple Raw Object source code:',
        '[new Array, new Object, new Boolean, new Number, ' +
            'new String, new RegExp, new Function, new Date]'   ] ,

    [   'Literal Instances source code:',
        '[ [], {}, true, 1, "", /./, function(){}, new Date() ]'    ] ,

    [   'some predefined entities:',
        '[JSON, Math, null, Infinity, NaN, ' +
            'void(0), Function, Array, Object, undefined]'      ]
    ])
alert([
    '\n\n\ntesting:',objRA[i][0],objRA[i][1],
    '\n.toSource()',(obj=eval(objRA[i][1])).toSource(),
    '\ntoSource() spoof:',obj.spoof()
].join('\n'));

che visualizza:

testing:
Simple Raw Object source code:
[new Array, new Object, new Boolean, new Number, new String,
          new RegExp, new Function, new Date]

.toSource()
[[], {}, (new Boolean(false)), (new Number(0)), (new String("")),
          /(?:)/, (function anonymous() {}), (new Date(1303248037722))]

toSource() spoof:
[[], {}, {}, {}, (new String("")),
          {}, {}, new Date("Tue, 19 Apr 2011 21:20:37 GMT")]

e

testing:
Literal Instances source code:
[ [], {}, true, 1, "", /./, function(){}, new Date() ]

.toSource()
[[], {}, true, 1, "", /./, (function () {}), (new Date(1303248055778))]

toSource() spoof:
[[], {}, true, 1, ", {}, {}, new Date("Tue, 19 Apr 2011 21:20:55 GMT")]

e

testing:
some predefined entities:
[JSON, Math, null, Infinity, NaN, void(0), Function, Array, Object, undefined]

.toSource()
[JSON, Math, null, Infinity, NaN, (void 0),
       function Function() {[native code]}, function Array() {[native code]},
              function Object() {[native code]}, (void 0)]

toSource() spoof:
[{}, {}, null, Infinity, NaN, undefined, {}, {}, {}, undefined]

8

In realtà esiste un'opzione semplice (per browser recenti e Node.js) mancante nelle risposte esistenti:

console.log('Item: %o', o);

Preferirei questo perché JSON.stringify()ha alcune limitazioni (ad esempio con strutture circolari).


7

Sembra che JSON accetti il ​​secondo parametro che potrebbe aiutare con le funzioni: il sostituto , questo risolve il problema della conversione nel modo più elegante:

JSON.stringify(object, (key, val) => {
    if (typeof val === 'function') {
      return String(val);
    }
    return val;
  });

5

Se ti interessano solo stringhe, oggetti e matrici:

function objectToString (obj) {
        var str = '';
        var i=0;
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                if(typeof obj[key] == 'object')
                {
                    if(obj[key] instanceof Array)
                    {
                        str+= key + ' : [ ';
                        for(var j=0;j<obj[key].length;j++)
                        {
                            if(typeof obj[key][j]=='object') {
                                str += '{' + objectToString(obj[key][j]) + (j > 0 ? ',' : '') + '}';
                            }
                            else
                            {
                                str += '\'' + obj[key][j] + '\'' + (j > 0 ? ',' : ''); //non objects would be represented as strings
                            }
                        }
                        str+= ']' + (i > 0 ? ',' : '')
                    }
                    else
                    {
                        str += key + ' : { ' + objectToString(obj[key]) + '} ' + (i > 0 ? ',' : '');
                    }
                }
                else {
                    str +=key + ':\'' + obj[key] + '\'' + (i > 0 ? ',' : '');
                }
                i++;
            }
        }
        return str;
    }

5

stringify-objectè una buona libreria npm creata dal team di yeoman: https://www.npmjs.com/package/stringify-object

npm install stringify-object

poi:

const stringifyObject = require('stringify-object');
stringifyObject(myCircularObject);

Ovviamente è interessante solo se hai un oggetto circolare che fallirebbe JSON.stringify();


1
Perché qualcuno dovrebbe usare un modulo NPM per qualcosa del genere, che può essere realizzato da un one-liner in semplice JS? Questa risposta ha bisogno di dettagli sul perché qualcuno dovrebbe farlo.
Zelphir Kaltstahl,

Come spesso, una lib aiuterebbe nel caso limite. L'ho usato per trattare riferimenti circolari.
Nicolas Zozol,

1
Questo ha più senso con la nota aggiunta sugli oggetti circolari, rimuovendo il mio downvote.
Zelphir Kaltstahl,

4

Dai un'occhiata al plugin jQuery-JSON

Al suo interno, utilizza JSON.stringify ma torna al proprio parser se il browser non lo implementa.


4

Poiché firefox non restringe alcuni oggetti come oggetto schermo; se vuoi avere lo stesso risultato come JSON.stringify(obj)::

function objToString (obj) {
    var tabjson=[];
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            tabjson.push('"'+p +'"'+ ':' + obj[p]);
        }
    }  tabjson.push()
    return '{'+tabjson.join(',')+'}';
}

4

Per oggetti non nidificati:

Object.entries(o).map(x=>x.join(":")).join("\r\n")

2
var o = {a:1, b:2};

o.toString=function(){
  return 'a='+this.a+', b='+this.b;
};

console.log(o);
console.log('Item: ' + o);

Poiché Javascript v1.0 funziona ovunque (anche IE), questo è un approccio nativo e consente un aspetto molto personalizzato del tuo oggetto durante il debug e in produzione https://developer.mozilla.org/en/docs/Web/JavaScript/Reference / Global_Objects / oggetto / toString

Esempio utile

var Ship=function(n,x,y){
  this.name = n;
  this.x = x;
  this.y = y;
};
Ship.prototype.toString=function(){
  return '"'+this.name+'" located at: x:'+this.x+' y:'+this.y;
};

alert([new Ship('Star Destroyer', 50.001, 53.201),
new Ship('Millennium Falcon', 123.987, 287.543),
new Ship('TIE fighter', 83.060, 102.523)].join('\n'));//now they can battle!
//"Star Destroyer" located at: x:50.001 y:53.201
//"Millennium Falcon" located at: x:123.987 y:287.543
//"TIE fighter" located at: x:83.06 y:102.523

Inoltre, come bonus

function ISO8601Date(){
  return this.getFullYear()+'-'+(this.getMonth()+1)+'-'+this.getDate();
}
var d=new Date();
d.toString=ISO8601Date;//demonstrates altering native object behaviour
alert(d);
//IE6   Fri Jul 29 04:21:26 UTC+1200 2016
//FF&GC Fri Jul 29 2016 04:21:26 GMT+1200 (New Zealand Standard Time)
//d.toString=ISO8601Date; 2016-7-29

2

Se puoi usare lodash puoi farlo in questo modo:

> var o = {a:1, b:2};
> '{' + _.map(o, (value, key) => key + ':' + value).join(', ') + '}'
'{a:1, b:2}'

Con lodash map()puoi anche iterare su Oggetti. In questo modo ogni voce chiave / valore viene associata alla sua rappresentazione di stringa:

> _.map(o, (value, key) => key + ':' + value)
[ 'a:1', 'b:2' ]

E join()metti insieme le voci dell'array.

Se puoi utilizzare ES6 Template String, funziona anche:

> `{${_.map(o, (value, key) => `${key}:${value}`).join(', ')}}`
'{a:1, b:2}'

Si noti che questo non è ricorsivo attraverso l'Oggetto:

> var o = {a:1, b:{c:2}}
> _.map(o, (value, key) => `${key}:${value}`)
[ 'a:1', 'b:[object Object]' ]

Come farà il nodoutil.inspect() :

> util.inspect(o)
'{ a: 1, b: { c: 2 } }'


1
/*
    This function is as JSON.Stringify (but if you has not in your js-engine you can use this)
    Params:
        obj - your object
        inc_ident - can be " " or "\t".
        show_types - show types of object or not
        ident - need for recoursion but you can not set this parameter.
*/
function getAsText(obj, inc_ident, show_types, ident) {
    var res = "";
    if (!ident)
        ident = "";
    if (typeof(obj) == "string") {
        res += "\"" + obj + "\" ";
        res += (show_types == true) ? "/* typeobj: " + typeof(obj) + "*/" : "";
    } else if (typeof(obj) == "number" || typeof(obj) == "boolean") {
        res += obj;
        res += (show_types == true) ? "/* typeobj: " + typeof(obj) + "*/" : "";
    } else if (obj instanceof Array) {
        res += "[ ";
        res += show_types ? "/* typeobj: " + typeof(obj) + "*/" : "";
        res += "\r\n";
        var new_ident = ident + inc_ident;
        var arr = [];
        for(var key in obj) {
            arr.push(new_ident + getAsText(obj[key], inc_ident, show_types, new_ident));
        } 
        res += arr.join(",\r\n") + "\r\n";
        res += ident + "]";
    } else {
        var new_ident = ident + inc_ident;      
        res += "{ ";
        res += (show_types == true) ? "/* typeobj: " + typeof(obj) + "*/" : "";
        res += "\r\n";
        var arr = [];
        for(var key in obj) {
            arr.push(new_ident + '"' + key + "\" : " + getAsText(obj[key], inc_ident, show_types, new_ident));
        }
        res += arr.join(",\r\n") + "\r\n";
        res += ident + "}\r\n";
    } 
    return res;
};

esempio da usare:

var obj = {
    str : "hello",
    arr : ["1", "2", "3", 4],
b : true,
    vobj : {
        str : "hello2"
    }
}

var ForReading = 1, ForWriting = 2;
var fso = new ActiveXObject("Scripting.FileSystemObject")
f1 = fso.OpenTextFile("your_object1.txt", ForWriting, true)
f1.Write(getAsText(obj, "\t"));
f1.Close();

f2 = fso.OpenTextFile("your_object2.txt", ForWriting, true)
f2.Write(getAsText(obj, "\t", true));
f2.Close();

your_object1.txt:

{ 
    "str" : "hello" ,
    "arr" : [ 
        "1" ,
        "2" ,
        "3" ,
        4
    ],
    "b" : true,
    "vobj" : { 
        "str" : "hello2" 
    }

}

your_object2.txt:

{ /* typeobj: object*/
    "str" : "hello" /* typeobj: string*/,
    "arr" : [ /* typeobj: object*/
        "1" /* typeobj: string*/,
        "2" /* typeobj: string*/,
        "3" /* typeobj: string*/,
        4/* typeobj: number*/
    ],
    "b" : true/* typeobj: boolean*/,
    "vobj" : { /* typeobj: object*/
        "str" : "hello2" /* typeobj: string*/
    }

}

1
Sarebbe buono e spiegazione di ciò che fa il codice e un esempio di come usarlo. Grazie
estemendoza il

1

Per il tuo esempio, penso che console.log("Item:",o) sarebbe più semplice. Ma console.log("Item:" + o.toString) funzionerebbe anche.

Utilizzando il metodo numero uno si utilizza un bel menu a discesa nella console, quindi un oggetto lungo funzionerebbe bene.


1
function objToString (obj) {
    var str = '{';
    if(typeof obj=='object')
      {

        for (var p in obj) {
          if (obj.hasOwnProperty(p)) {
              str += p + ':' + objToString (obj[p]) + ',';
          }
      }
    }
      else
      {
         if(typeof obj=='string')
          {
            return '"'+obj+'"';
          }
          else
          {
            return obj+'';
          }
      }



    return str.substring(0,str.length-1)+"}";
}

1

Spero che questo esempio sia di aiuto per tutti coloro che stanno lavorando su array di oggetti

var data_array = [{
                    "id": "0",
                    "store": "ABC"
                },{
                    "id":"1",
                    "store":"XYZ"
                }];
console.log(String(data_array[1]["id"]+data_array[1]["store"]));

1

Se non aplay join () su Object.

const obj = {one:1, two:2, three:3};
let arr = [];
for(let p in obj)
    arr.push(obj[p]);
const str = arr.join(',');

0

Se vuoi un metodo minimalista per convertire una variabile in una stringa per una situazione di tipo di espressione in linea, ''+variablenameè il migliore che abbia mai giocato a golf.

Se 'variablename' è un oggetto e usi l'operazione di concatenazione di stringhe vuote, ti darà il fastidioso [object Object], nel qual caso probabilmente vorrai la JSON.stringifyrisposta enormemente votata di Gary C. alla domanda pubblicata, di cui puoi leggere sulla Rete degli sviluppatori di Mozilla al link in quella risposta in alto .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.