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

neyi ihtiyacım sonuçjavascript

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

olacak şekilde dizideki her nesnenin data üzerinde bir bölünmeyi uygulamaktır i döngü can biliyorum nesnelerin dizisinde her öğesi için bir işlev uygulamak Her biri için dizi kullanmak ve yeni bir dizi üretmek, ancak daha iyi, daha hızlı bir yöntem var mı?

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

Eğer yeni bir dizi yapmak gerekir mi? Orijinali ayarlayabilir misin? – epascarello

+4

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

+2

'' ... 'döngüleri için kullanmayın dizileri tekrarlamak için! – Oriol

cevap

31

Sen Array.prototype.map kullanabilirsiniz: comment söylediği gibi

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

, bu şekilde old_array değiştirmek, özgün diziye hiçbir değişen ile geri arama işlevinde bir yeni bir nesne geri dönebilirler.

+2

Not Bu, "old_array" içindeki nesneleri değiştirir. – Oriol

+0

@xdazz, kendiniz için görebileceğiniz haklı [burada] (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' 
}]; 

Sence currentObject.data, dayalı split ve sonra hepimiz bölünmüş dizeleri üzerinde Number işlevi çağırmak, İşte bu

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

gibi yeni bir dizi oluşturmak için data üzerinde Array.prototype.map kullanabilirsiniz Böylece, sonuç nesnesinin data numarasını, soruda istediğiniz gibi alacaksınız.

Çıktı

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