Convertir un tableau javascript en chaîne

115

J'essaye d'itérer sur une liste de «valeur» et de la convertir en chaîne. Voici le code:

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

La fonction alert () fonctionne très bien et affiche la valeur appropriée. Mais d'une manière ou d'une autre, la fonction .get () de jquery n'obtient pas le bon type d'objet et échoue. Qu'est-ce que je fais mal?

Néo
la source
5
qu'est-ce que la «valeur»? Est-ce un tableau? Si c'est le cas, var str = value.join (',') pourrait fonctionner correctement.
StefanS
Oui. Si je commente la partie .get (), alors j'obtiens des boîtes d'alerte qui affichent "id1: val1", "id2: val2" etc.
Neo
Voulez-vous dire "... obtenir le bon type d'objet"? (Une relecture rapide avant de cliquer sur Poser une question est généralement une bonne idée.) (J'ai supprimé mon commentaire précédent qui était plutôt plus fortement posé - cette question contient beaucoup moins de fautes de frappe et d'autres.)
TJ Crowder

Réponses:

131

Si valueest un tableau associatif, un tel code fonctionnera bien:

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>

(la sortie apparaîtra dans la console de développement)

Comme Felix l'a mentionné, il ne each()fait qu'itérer le tableau, rien de plus.

Shadow Wizard est une oreille pour vous
la source
118

La conversion d'un tableau à une chaîne est si simple!

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

Voilà maintenant A est une chaîne. :)

Homme araignée
la source
7
Je suggérerais plutôt A.toString () pour que ce que vous fassiez soit plus clair.
Justin
8
Si vous le faites [1,2,[3]].toString(), vous obtiendrez 1,2,3, ce qui est assez nul. Cette réponse est juste une pire façon d'écrire le même appel à la même méthode de chaîne native cassée. 42 votes positifs ??
Carl Smith
8
vous pouvez également rejoindre un tableau comme celui-ci['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoxin
1
Array.join()est certainement la meilleure option, car elle ne concaténera pas simplement les valeurs avec des virgules, mais permettra à l'utilisateur de déterminer comment la concaténation doit être effectuée. Vous pouvez utiliser virgule + espace par exemple.
Felipe Leão
1
C'est parfait pour moi. Je passe un tableau qui est changé en une chaîne séparée par des virgules sans espace pour un appel api. Merci encore.
Nick D
104

Vous pouvez utiliser .toString()pour joindre un tableau avec une virgule.

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

Ou, définissez le séparateur avec array.join('; '); // result: a; b; c.

Justin
la source
3
J'espérais juste que le tableau soit littéralement traduit en une chaîne et que je sois alors obligé d'utiliser Regex pour couper la graisse, mais c'est Oh tellement mieux! Merci Justin.
canneberge
52

Je ne sais pas si c'est ce que vous vouliez mais

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

Cela se traduit par la sortie suivante:

A, B, C

Nicolas
la source
1
c'est la manière la plus simple qui soit, bravo
Jimmy Obonyo Abor
1
J'avais besoin d'un espace supplémentaire pour la virgule, c'était le seul moyen facile .
Talha Talip Açıkgöz
1
Le moyen le plus simple et le plus simple. Merci
Raul A.
36

Quatre méthodes pour convertir un tableau en chaîne.

Coercition sur une chaîne

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

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

Appel .toString()

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

Rejoindre explicitement en utilisant .join()

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

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

Vous pouvez utiliser d'autres séparateurs, par exemple, ', '

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

En utilisant JSON.stringify()

C'est plus propre, car il cite les chaînes à l'intérieur du tableau et gère correctement les tableaux imbriqués.

var arr = JSON.stringify(['a', 'b', 'c']);  // '["a","b","c"]'
VIJAY P
la source
17

jQuery.eachest juste en boucle sur le tableau, il ne fait rien avec la valeur de retour . Vous recherchez jQuery.map(je pense aussi que c'est get()inutile car vous n'avez pas affaire à des objets jQuery):

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

DEMO


Mais pourquoi utiliser jQuery dans ce cas? mapn'introduit qu'un appel de fonction inutile par élément.

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(', ');

∆: Il utilise uniquement la valeur de retour, qu'il continue ou non à boucler sur les éléments. Le renvoi d'une valeur «falsifiée» arrêtera la boucle.

Félix Kling
la source
J'ai en quelque sorte collé du code "nettoyé" ici. Je traite en fait des objets jquery. Merci, la carte fonctionne parfaitement.
Neo
@Neo: Vous n'avez besoin que de mapif valueest un objet jQuery. Et puis vous devriez utiliser value.map(...).get(). Mais si vous avez juste un tableau d'objets jQuery, alors vous n'en avez pas besoin get. Vous êtes le bienvenu :)
Felix Kling
9

Utilisez join()et le séparateur.

Exemple de travail

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);

Deepu Reghunath
la source
4

c'est ma fonction, convertir un objet ou un tableau en 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+= '}';
}

je viens de modifier en 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')? ' ] ':' } ');;
}
buitanan
la source
3

J'avais besoin d'un tableau pour devenir une représentation String d'un tableau, je veux dire que j'en avais besoin

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']"

peut-être que quelqu'un en a besoin :)

Magico
la source
2
var arr = new Array();

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

console.log(blkstr);

OU

var arr = new Array();

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

});

console.log(arr.join(', '));
Santosh Linkha
la source
2

convertir un tableau en une chaîne de paramètres GET qui peut être ajoutée à une URL peut être effectuée comme suit

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

appelez cette fonction comme

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;

qui redirigera l'utilisateur vers le / site / search? page avec les paramètres get décrits dans le tableau donné à encodeGet.

Fydo
la source
1
Notez que jQuery.param (array) fait ce que fait encodeGet (array).
Curtis Yallop
1

Ne devrait pas confondre Array avec Lists ... Ceci est une liste: {...} et n'a pas de longueur, ou d'autres propriétés de Array.

Ceci est un tableau: [...] et vous pouvez utiliser des fonctions de tableau, des méthodes et ainsi, comme quelqu'un l'a suggéré ici: someArray.toString ();

"someObj.toString ();" ne fonctionnera simplement sur aucun autre type d'objets, comme les listes. ;-)

Pedro Ferreira
la source
0

Voici un exemple utilisant des fonctions de soulignement.

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

La sortie finale serait "moe, larry, curly"

sabin
la source