web-dev-qa-db-fra.com

jQuery: convertir un tableau javascript en chaîne

J'essaye de parcourir une liste de "valeurs" 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?

100
Neo

Si value est un tableau associatif, ce code fonctionnera correctement:

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é, each() ne fait qu'itérer le tableau, rien de plus.

122
Shadow Wizard

Conversion de tableau en chaîne est si facile!

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

Ça y est, maintenant A est une chaîne. :)

108
Spiderman

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

93
Justin

je ne sais pas si c'est ce que tu voulais mais

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

Cela se traduit par la sortie suivante:

A, B, C

43
Nicholas

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

Forcer à une ficelle

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

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

Appeler .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"

Utilisation de JSON.stringify()

Ceci est plus propre, car il cite des 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"]'
32
VIJAY P

jQuery.each est juste en boucle sur le tableau, il ne fait rien avec la valeur de retourΔ. Vous recherchez jQuery.map (Je pense également que get() est inutile car vous ne traitez pas d'objets jQuery):

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

D&EACUTE;MO


Mais pourquoi utiliser jQuery du tout dans ce cas? map introduit uniquement 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 pour continuer ou non de passer en boucle sur les éléments. Renvoyer une valeur "falsy" arrêtera la boucle.

16
Felix Kling

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 à 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')? ' ] ':' } ');;
}
4
buitanan
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(', '));
2
Santosh Linkha

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

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

appeler 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 transmettra l'utilisateur au/site/search? page avec les paramètres get décrits dans le tableau donné à encodeGet.

2
Fydo

J'avais besoin d'un tableau pour devenir une représentation sous forme de chaîne d'un tableau .__ Je veux dire que j'avais besoin de ça

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

2
Magico

Il ne faut pas confondre les tableaux avec les listes .... C'est une liste: {...} qui n'a pas de longueur ni d'autres propriétés de tableau.

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

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

1
Pedro Ferreira

Array.prototype.toString ()

La méthode toString () renvoie une chaîne représentant le tableau spécifié et ses éléments.

var months = ["Jan", "Feb", "Mar", "Apr"];
months.toString(); // "Jan,Feb,Mar,Apr"

Syntaxe

arr.toString()

Valeur de retour

Une chaîne représentant les éléments du tableau.

pour plus d'informations :

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString

1
KARTHIKEYAN.A

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);
0
Deepu Reghunath

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

Le résultat final serait "moe, larry, curly"

0
sabin