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?


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.


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


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.


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


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

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.


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


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')? ' ] ':' } ');;
}

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


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

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.


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



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"

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.