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

was ich brauche ist eine gespaltene auf data jedes Objekts in dem Array anzulegen, so dass das ErgebnisJavaScript anwenden, eine Funktion zu jedem Element auf Array von Objekten

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

würde ich weiß, ich kann loop Array für jedes verwenden und ein neues Array erzeugen, aber gibt es eine bessere, schnellere Methode?

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

Benötigen Sie ein neues Array zu machen? Kannst du das Original einfach anpassen? – epascarello

+4

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

+2

Verwenden Sie keine "for ... in" -Schleifen um Arrays zu iterieren! – Oriol

Antwort

31

Sie Array.prototype.map verwenden:

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

Wie der Kommentar sagte, auf diese Weise die old_array ändern, könnten Sie ein neues Objekt in der Callback-Funktion ohne Wechsel auf die Original-Array zurück.

+2

Beachten Sie, dass dies die Objekte in 'old_array' modifiziert. – Oriol

+0

@xdazz ist richtig können Sie selbst sehen [hier] (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' 
}]; 

können Sie die Array.prototype.map auf data verwenden, um ein neues Array zu konstruieren, wie diese

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

Hier stellen wir split die currentObject.data basierend auf , und dann rufen wir Number Funktion auf allen geteilten Streichern , so dass Sie die data des Ergebnisobjekts als Zahlen erhalten, wie Sie in der Frage wollten.

Ausgabe

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