2015-04-21 13 views
19
[ {name:'hi',data:'1,2,3,4,5'} , {name:'hello',data:'5,4,3,2,1'} ] 

co potrzebne jest, aby zastosować podział na data każdego obiektu w tablicy tak, że wynik byłbyjavascript funkcję do każdego elementu na tablicę obiektów

[ {name:'hi',data:[1,2,3,4,5]} , {name:'hello',data:[5,4,3,2,1]} ] 

wiem, że mogę pętli używać tablicy dla każdego i stworzyć nową tablicę, ale czy istnieje lepsza, szybsza metoda?

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); 
} 
+0

Czy trzeba zrobić nową tablicę? Czy możesz dostosować oryginał? – epascarello

+4

[Array.prototype.map] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) – Barmar

+2

Nie używaj pętli 'for ... in' powtarzać tablice! – Oriol

Odpowiedz

31

Można użyć Array.prototype.map:

var new_array = old_array.map(function(e) { 
    e.data = e.data.split(','); 
    return e; 
}); 

Jako komentarz powiedział, w ten sposób zmienić old_array, można zwrócić nowy obiekt w funkcji zwrotnej bez zmiany do oryginalnej tablicy.

+2

Uwaga to modyfikuje obiekty w 'old_array'. – Oriol

+0

@xdazz ma rację, sam widzisz [tutaj] (http://jsbin.com/dorogobose/2/edit) – JustGage

14
var data = [{ 
    name: 'hi', 
    data: '1,2,3,4,5' 
}, { 
    name: 'hello', 
    data: '5,4,3,2,1' 
}]; 

Można użyć Array.prototype.map na data skonstruować nową tablicę, jak to

var result = data.map(function (currentObject) { 
    return { 
     name: currentObject.name, 
     data: currentObject.data.split(",").map(Number) 
    }; 
}); 

Tutaj splitcurrentObject.data podstawie , a następnie nazywamy Number funkcję na wszystkich strunach dzielonych , dzięki czemu otrzymasz wynik obiektu data jako liczby, jak chciałeś w pytaniu.

Wyjście

[{ 
    name: 'hi', 
    data: [1, 2, 3, 4, 5] 
}, { 
    name: 'hello', 
    data: [5, 4, 3, 2, 1] 
}] 
Powiązane problemy