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

những gì tôi cần là để áp dụng một sự chia rẽ trên data của từng đối tượng trong mảng để kết quả sẽ làjavascript áp dụng một chức năng để mỗi phần tử trên mảng các đối tượng

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

tôi biết tôi có thể lặp mảng sử dụng cho mỗi và tạo ra một mảng mới, nhưng có một phương pháp tốt hơn, nhanh hơn?

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

Bạn cần phải thực hiện một mảng mới? Bạn có thể điều chỉnh bản gốc không? – epascarello

+4

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

+2

Không sử dụng 'cho ... trong các vòng lặp để lặp mảng! – Oriol

Trả lời

31

Bạn có thể sử dụng Array.prototype.map:

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

Khi bình luận cho biết, theo cách này thay đổi old_array, bạn có thể trả về một đối tượng mới trong hàm callback không có thay đổi đến các mảng ban đầu.

+2

Lưu ý điều này sửa đổi các đối tượng trong 'old_array'. – Oriol

+0

@xdazz là đúng bạn có thể xem cho chính mình [ở đây] (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' 
}]; 

Bạn có thể sử dụng Array.prototype.map trên data để xây dựng một mảng mới, như thế này

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

Ở đây, chúng tôi split các currentObject.data dựa trên , và sau đó chúng ta gọi là Number chức năng trên tất cả các chuỗi phân chia , để bạn sẽ nhận được số data của đối tượng kết quả dưới dạng số, như bạn muốn trong câu hỏi.

Output

[{ 
    name: 'hi', 
    data: [1, 2, 3, 4, 5] 
}, { 
    name: 'hello', 
    data: [5, 4, 3, 2, 1] 
}] 
Các vấn đề liên quan