Tengo una matriz como esta: var arr = ["1:a", "2:b", "3:c"];

De la matriz anterior, quiero un objeto: var obj = { "1": "a", "2": "b", "3": "c" }

Estoy haciendo:

  var obj = {}
    $.each(arr, function (i, value) {
        var valueSplit = value.split(':');
// I don't know how to make the object
    });

Editar: Mi pregunta está marcada como duplicada, mientras que la pregunta que hice es totalmente opuesta a la pregunta duplicada marcada.

2
Kamran 10 may. 2016 a las 12:55

3 respuestas

La mejor respuesta

Solo agrega la tarea.

var obj = {}
$.each(arr, function (i, value) {
    var valueSplit = value.split(':');
    obj[valueSplit[0]] = valueSplit[1]; 
});
1
Nina Scholz 10 may. 2016 a las 09:58

Simplemente prueba esto

var arr = ["1:a", "2:b", "3:c"];
var map = {};
arr.forEach( function(val){ 
   var keyVal = val.split( ":" ); 
   map[ keyVal[ 0 ] ] = keyVal[ 1 ];
});

map es el objeto que estás buscando.

DEMO

var arr = ["1:a", "2:b", "3:c"];
var map = {};
arr.forEach( function(val){ 
   var keyVal = val.split( ":" ); 
   map[ keyVal[ 0 ] ] = keyVal[ 1 ];
});

document.body.innerHTML += JSON.stringify( map, 0, 4 );
0
gurvinder372 10 may. 2016 a las 09:58

Desde su código, en lugar del comentario que podría escribir

obj[valueSplit[0]] = valueSplit[1];

Esto podría escribirse como una simple reducción:

var obj = arr.reduce(function(x,y) { return z = y.split(':'), x[z[0]]=z[1], x; }, {});
var arr = ["1:a", "2:b", "3:c"];
var obj = arr.reduce(function(x,y) { return z = y.split(':'), x[z[0]]=z[1], x; }, {});
document.write(JSON.stringify(obj));
2
David Hedlund 10 may. 2016 a las 10:00