Convertir una matriz de JavaScript en una cadena

115

Estoy tratando de iterar sobre una lista de "valores" y convertirla en una cadena. Aquí está el código:

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

La función alert () funciona bien y muestra el valor adecuado. Pero de alguna manera, la función .get () de jquery no obtiene el tipo correcto de objeto y falla. ¿Qué estoy haciendo mal?

Neo
fuente
5
¿Qué es "valor"? ¿Es una matriz? Si es así, var str = value.join (',') podría funcionar bien.
StefanS
Si. Si comento la parte .get (), obtengo cuadros de alerta que muestran "id1: val1", "id2: val2", etc.
Neo
¿Quiere decir "... obtener el tipo de objeto correcto "? (Una revisión rápida antes de hacer clic en Preguntar pregunta suele ser una buena idea). (Eliminé mi comentario anterior, que era bastante más contundente: esta pregunta tiene muchos menos errores tipográficos que muchos).
TJ Crowder

Respuestas:

131

Si valuees una matriz asociativa, dicho código funcionará 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 salida aparecerá en la consola de desarrollo)

Como mencionó Felix, each()solo está iterando la matriz, nada más.

Shadow Wizard es el oído para ti
fuente
118

¡Convertir de matriz a cadena es muy fácil!

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

Eso es todo. Ahora A es una cuerda. :)

hombre araña
fuente
7
Sugeriría A.toString () en su lugar para que quede más claro lo que está haciendo.
Justin
8
Si lo hace [1,2,[3]].toString(), lo conseguirá 1,2,3, lo cual es bastante basura. Esta respuesta es solo una forma peor de escribir la misma llamada al mismo método de cadena nativo roto. 42 votos a favor
Carl Smith
8
también puede unirse a una matriz como esta['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoxin
1
Array.join()es definitivamente la mejor opción, ya que no se limitará a concatenar valores con comas, sino que permitirá al usuario determinar cómo se debe realizar la concatenación. Podría usar coma + espacio en blanco, por ejemplo.
Felipe Leão
1
Esto es perfecto para mí. Estoy pasando una matriz que se cambia a una cadena separada por comas sin espacios para una llamada api. Gracias de nuevo.
Nick D
104

Puede usar .toString()para unir una matriz con una coma.

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

O configure el separador con array.join('; '); // result: a; b; c.

Justin
fuente
3
Solo esperaba que la matriz se tradujera literalmente a una cadena y que luego me viera obligado a usar Regex para recortar la grasa, pero esto es ¡Oh, mucho mejor! Gracias Justin.
arándano
52

No estoy seguro si esto es lo que querías pero

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

Esto da como resultado el siguiente resultado:

A B C

Nicolás
fuente
1
esta es la forma más sencilla de todas, felicitaciones
Jimmy Obonyo Abor
1
Necesitaba un espacio extra para la coma, esta era la única forma fácil .
Talha Talip Açıkgöz
1
La forma más sencilla y fácil. Gracias
Raul A.
36

Cuatro métodos para convertir una matriz en una cadena.

Coaccionando a una cuerda

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

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

Vocación .toString()

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

Unirse explícitamente usando .join()

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

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

Puede utilizar otros separadores, por ejemplo, ', '

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

Utilizando JSON.stringify()

Esto es más limpio, ya que cita cadenas dentro de la matriz y maneja las matrices anidadas correctamente.

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

jQuery.eachsimplemente está recorriendo la matriz, no hace nada con el valor de retorno . Está buscando jQuery.map(también creo que get()es innecesario ya que no está tratando con objetos jQuery):

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

MANIFESTACIÓN


Pero, ¿por qué usar jQuery en este caso? mapsolo introduce una llamada de función innecesaria por 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(', ');

∆: Solo usa el valor de retorno si debe continuar recorriendo los elementos o no. Devolver un valor "falso" detendrá el ciclo.

Felix Kling
fuente
Pegué un código "limpiado" aquí. De hecho, estoy tratando con objetos jquery. Gracias, el mapa funciona perfectamente.
Neo
@Neo: Solo necesitas mapsi valuees un objeto jQuery. Y luego deberías usar value.map(...).get(). Pero si solo tiene una matriz de objetos jQuery, entonces no necesita get. De nada :)
Felix Kling
9

Utilice join()y el separador.

Ejemplo de trabajo

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
fuente
4

esta es mi función, convertir objeto o matriz a 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+= '}';
}

acabo de editar a 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
fuente
3

Necesitaba una matriz para convertirme en una representación de cadena de una matriz, quiero decir, necesitaba eso

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

tal vez alguien lo necesite :)

Mágico
fuente
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(', '));
Santosh Linkha
fuente
2

convertir una matriz en una cadena de parámetros GET que se puede agregar a una URL se puede hacer de la siguiente manera

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

llamar a esta función como

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;

que reenviará al usuario a / site / search? página con los parámetros de obtención descritos en la matriz dada a encodeGet.

Fydo
fuente
1
Tenga en cuenta que jQuery.param (array) hace lo que hace encodeGet (array).
Curtis Yallop
1

No debería confundir Array con Lists ... Esta es una lista: {...} y no tiene longitud, ni tiene otras propiedades de Array.

Esta es una matriz: [...] y puede usar funciones de matriz, métodos y demás, como alguien sugirió aquí: someArray.toString ();

"someObj.toString ();" simplemente no funcionará en ningún otro tipo de objeto, como Listas. ;-)

Pedro Ferreira
fuente
0

Aquí hay un ejemplo con funciones de subrayado.

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

El resultado final sería "moe, larry, curly"

sabin
fuente