Converti array javascript in stringa


115

Sto cercando di iterare su un elenco di "valori" e convertirlo in una stringa. Ecco il codice:

var blkstr = $.each(value, function(idx2,val2) {                    
     var str = idx2 + ":" + val2;
     alert(str);
     return str;
}).get().join(", ");    

La funzione alert () funziona bene e mostra il valore corretto. Ma in qualche modo, la funzione .get () di jquery non ottiene il giusto tipo di oggetto e fallisce. Che cosa sto facendo di sbagliato?


5
cos'è il "valore"? È un array? Se è così var str = value.join (',') potrebbe funzionare bene.
StefanS

Sì. Se commento la parte .get (), ottengo delle caselle di avviso che visualizzano "id1: val1", "id2: val2" ecc.
Neo

Intendi "... prendi il giusto tipo di oggetto"? (Una rapida correzione prima di fare clic su Fai domanda di solito è una buona idea.) (Ho rimosso il mio commento precedente che era stato espresso in modo piuttosto più deciso: questa domanda ha molti meno errori di battitura e simili di molti.)
TJ Crowder

Risposte:


131

Se valueè un array associativo, tale codice funzionerà bene:

var value = { "aaa": "111", "bbb": "222", "ccc": "333" };
var blkstr = [];
$.each(value, function(idx2,val2) {                    
  var str = idx2 + ":" + val2;
  blkstr.push(str);
});
console.log(blkstr.join(", "));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

(l'output apparirà nella console di sviluppo)

Come ha detto Felix, each()sta solo iterando l'array, niente di più.


118

La conversione da array a stringa è così facile!

var A = ['Sunday','Monday','Tuesday','Wednesday','Thursday']
array = A + ""

Ecco fatto Ora A è una stringa. :)


7
Suggerirei invece A.toString () in modo che sia più chiaro cosa stai facendo.
Justin

8
Se lo fai [1,2,[3]].toString(), otterrai 1,2,3, il che è piuttosto spazzatura. Questa risposta è solo un modo peggiore per scrivere la stessa chiamata allo stesso metodo di stringa nativo rotto. 42 voti favorevoli ??
Carl Smith

8
puoi anche unirti a un array come questo['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoxin

1
Array.join()è sicuramente l'opzione migliore, poiché non concatena semplicemente i valori con virgole, ma consente all'utente di determinare come deve essere eseguita la concatenazione. Ad esempio, potresti usare virgola + spazio vuoto.
Felipe Leão

1
Questo è perfetto per me. Sto passando un array che viene modificato in una stringa separata da virgole senza spazi per una chiamata api. Grazie ancora.
Nick D

104

È possibile utilizzare .toString()per unire un array con una virgola.

var array = ['a', 'b', 'c'];
array.toString(); // result: a,b,c

Oppure imposta il separatore con array.join('; '); // result: a; b; c.


3
Speravo solo che l'array venisse letteralmente tradotto in una stringa e che io fossi poi costretto a usare Regex per tagliare il grasso, ma questo è Oh So Much Better! Grazie Justin.
mirtillo

52

non sono sicuro se questo è quello che volevi ma

var arr = [A, B, C];
var arrString = arr.join(", ");

Ciò si traduce nel seguente output:

A, B, C


1
questo è il modo più semplice in assoluto, complimenti
Jimmy Obonyo Abor

1
Avevo bisogno di uno spazio in più per la virgola, questo era l'unico modo semplice .
Talha Talip Açıkgöz

1
Modo più semplice e facile. Grazie
Raul A.

36

Quattro metodi per convertire un array in una stringa.

Costringere a una corda

var arr = ['a', 'b', 'c'] + [];  // "a,b,c"

var arr = ['a', 'b', 'c'] + '';  // "a,b,c"

chiamata .toString()

var arr = ['a', 'b', 'c'].toString();  // "a,b,c"

Partecipare esplicitamente utilizzando .join()

var arr = ['a', 'b', 'c'].join();  // "a,b,c" (Defaults to ',' seperator)

var arr = ['a', 'b', 'c'].join(',');  // "a,b,c"

Puoi usare altri separatori, ad esempio, ', '

var arr = ['a', 'b', 'c'].join(', ');  // "a, b, c"

utilizzando JSON.stringify()

Questo è più pulito, poiché cita le stringhe all'interno dell'array e gestisce correttamente gli array annidati.

var arr = JSON.stringify(['a', 'b', 'c']);  // '["a","b","c"]'

17

jQuery.eachsta semplicemente eseguendo un ciclo sull'array, non fa nulla con il valore di ritorno . Stai cercando jQuery.map(penso anche che get()non sia necessario in quanto non hai a che fare con oggetti jQuery):

var blkstr = $.map(value, function(val,index) {                    
     var str = index + ":" + val;
     return str;
}).join(", ");  

DEMO


Ma perché usare jQuery in questo caso? mapintroduce solo una chiamata di funzione non necessaria per elemento.

var values = [];

for(var i = 0, l = value.length; i < l; i++) {
    values.push(i + ':' + value[i]);
}

// or if you actually have an object:

for(var id in value) {
    if(value.hasOwnProperty(id)) {
        values.push(id + ':' + value[id]);
    }
}

var blkstr = values.join(', ');

∆: Utilizza solo il valore di ritorno se deve continuare a scorrere gli elementi o meno. La restituzione di un valore "falso" interromperà il ciclo.


Ho incollato qui il codice "ripulito". Mi occupo infatti di oggetti jquery. Grazie, la mappa funziona perfettamente.
Neo

@Neo: hai solo bisogno di mapif valueè un oggetto jQuery. E poi dovresti usare value.map(...).get(). Ma se hai solo un array di oggetti jQuery, allora hai bisogno di no get. Prego :)
Felix Kling

9

Usa join()e il separatore.

Esempio di lavoro

var arr = ['a', 'b', 'c', 1, 2, '3'];

// using toString method
var rslt = arr.toString(); 
console.log(rslt);

// using join method. With a separator '-'
rslt = arr.join('-');
console.log(rslt);

// using join method. without a separator 
rslt = arr.join('');
console.log(rslt);


4

questa è la mia funzione, converti oggetto o array in json

function obj2json(_data){
    str = '{ ';
    first = true;
    $.each(_data, function(i, v) { 
        if(first != true)
            str += ",";
        else first = false;
        if ($.type(v)== 'object' )
            str += "'" + i + "':" + obj2arr(v) ;
        else if ($.type(v)== 'array')
            str += "'" + i + "':" + obj2arr(v) ;
        else{
            str +=  "'" + i + "':'" + v + "'";
        }
    });
    return str+= '}';
}

ho appena modificato in v0.2 ^. ^

 function obj2json(_data){
    str = (($.type(_data)== 'array')?'[ ': '{ ');
    first = true;
    $.each(_data, function(i, v) { 
        if(first != true)
            str += ",";
        else first = false;
        if ($.type(v)== 'object' )
            str += '"' + i + '":' + obj2json(v) ;
        else if ($.type(v)== 'array')
            str += '"' + i + '":' + obj2json(v) ;
        else{
            if($.type(_data)== 'array')
                str += '"' + v + '"';
            else
                str +=  '"' + i + '":"' + v + '"';
        }
    });
    return str+= (($.type(_data)== 'array')? ' ] ':' } ');;
}

3

Avevo bisogno di un array per diventare una rappresentazione String di un array, voglio dire che ne avevo bisogno

var a = ['a','b','c'];
//became a "real" array string-like to pass on query params so was easy to do:
JSON.stringify(a); //-->"['a','b','c']"

forse qualcuno ne ha bisogno :)


2
var arr = new Array();

var blkstr = $.each([1, 2, 3], function(idx2,val2) {                    
    arr.push(idx2 + ":" + val2);
    return arr;
}).join(', ');

console.log(blkstr);

O

var arr = new Array();

$.each([1, 2, 3], function(idx2,val2) {                    
    arr.push(idx2 + ":" + val2);

});

console.log(arr.join(', '));

2

convertire un array in una stringa di parametro GET che può essere aggiunto a un URL potrebbe essere fatto come segue

function encodeGet(array){
    return getParams = $.map(array , function(val,index) {                    
        var str = index + "=" + escape(val);
        return str;
   }).join("&");
}

chiama questa funzione come

var getStr = encodeGet({
    search:     $('input[name="search"]').val(),
    location:   $('input[name="location"]').val(),
    dod:        $('input[name="dod"]').val(),
    type:       $('input[name="type"]').val()
});
window.location = '/site/search?'+getStr;

che inoltrerà l'utente alla ricerca / site /? pagina con i parametri get delineati nell'array fornito a encodeGet.


1
Nota che jQuery.param (array) fa quello che fa encodeGet (array).
Curtis Yallop

1

Non dovresti confondere gli array con gli elenchi ... Questo è un elenco: {...} e non ha lunghezza o altre proprietà dell'array.

Questo è un array: [...] e puoi usare funzioni, metodi e così via, come qualcuno ha suggerito qui: someArray.toString ();

"SomeObj.toString ();" semplicemente non funzionerà su nessun altro tipo di oggetto, come Liste. ;-)



0

Ecco un esempio che utilizza le funzioni di sottolineatura.

var exampleArray = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];
var finalArray = _.compact(_.pluck(exampleArray,"name")).join(",");

L'output finale sarebbe "moe, larry, curly"

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.