[ {name:'hi',data:'1,2,3,4,5'} , {name:'hello',data:'5,4,3,2,1'} ] Lo que necesito es aplicar una división en data de cada objeto en la matriz para que el resultado sea:
[ {name:'hi',data:[1,2,3,4,5]} , {name:'hello',data:[5,4,3,2,1]} ] Sé que puedo recorrer la matriz usando for each y producir una nueva matriz, pero ¿hay un método mejor y más rápido?
var arr = [{ name: 'hi', data: '1,2,3,4,5' }, { name: 'hello', data: '5,4,3,2,1' }]; var new_arr = []; for (i in arr) { var temp = {}; temp.name = arr[i].name; temp.data = arr[i].data.split(','); new_arr.push(temp); }Podrías usar Array.prototype.map :
var new_array = old_array.map(function(e) { e.data = e.data.split(','); return e; }); Como decía el comentario, de esta manera cambia el old_array . También podría devolver un nuevo objeto en la función de devolución de llamada sin cambiar la matriz original.
var data = [{ name: 'hi', data: '1,2,3,4,5' }, { name: 'hello', data: '5,4,3,2,1' }]; Puede usar Array.prototype.map en data para construir una nueva matriz, como esta
var result = data.map(function (currentObject) { return { name: currentObject.name, data: currentObject.data.split(",").map(Number) }; }); Aquí, split currentObject.data en función de , y luego llamamos a la función Number en todas las cadenas divididas, para que obtenga los data del objeto de resultado como números, como deseaba en la pregunta.
Producción
[{ name: 'hi', data: [1, 2, 3, 4, 5] }, { name: 'hello', data: [5, 4, 3, 2, 1] }] let data = [{ name: 'hi', data: '1,2,3,4,5' }, { name: 'hello', data: '5,4,3,2,1' }], result = data.map(function(currentObject) { return { name: currentObject.name, data: currentObject.data.split(",").map(Number) }; }); console.log(result);