2013-04-04 48 views
7

Tôi có mảng này:Cách đơn giản để làm phẳng mảng này?

[{name: 'email',value: '[email protected]'}, {name: 'phone',value: '123-123-1234'}] 

tôi cần phải biến nó thành này:

{email: '[email protected]', phone: '123-123-1234'} 

Làm thế nào tôi có thể làm điều này? Tôi nghĩ tôi có thể làm một triệu lần lặp để hoàn thành công việc, nhưng tôi nghĩ có lẽ có một cách rõ ràng hơn để làm điều này.

Tôi đang sử dụng dấu gạch dưới và jQuery nếu điều đó có ích.

+1

Bạn sẽ phải interate cách này hay cách khác, kể từ khi bạn đang quay một mảng thành một đối tượng. '$ .map' có thể chuyển đổi các đối tượng thành các mảng, nhưng không phải là cách khác. – Blazemonger

Trả lời

1

Có một số cách để thực hiện tác vụ đó.

Một là sử dụng Array.prototype.map:

var arr = [{name: 'email',value: '[email protected]'}, {name: 'phone',value: '123-123-1234'}]; 
var obj = {}; 
arr.map(function (item) { 
    var key = item.name; 
    var value = item.value; 
    if (!obj[key]) { 
     obj[key] = value; 
    } 
}); 
console.log(obj); 

Như đã đề cập trong các ý kiến ​​và câu trả lời khác, .reduce(), .forEach() hoặc đơn giản cho vòng lặp có thể hoàn thành công việc là tốt.

+0

http://jsfiddle.net/NcaqY/ Có fiddle mẫu, có vẻ rõ ràng – kabuto178

+0

Đây không phải là cách duy nhất, bạn có thể sử dụng 'Array.prototype.reduce' – axelduch

+0

giảm là tốt hơn so với bản đồ và việc sử dụng bản đồ trong này câu trả lời không có ý nghĩa. Nó đang được coi là một vòng lặp. (Và vâng tôi biết đây là câu hỏi/câu trả lời 2+ tuổi) – epascarello

0

Gạch dướiJS thật tuyệt vời và bạn có thể sử dụng _.map. Xem mã bên dưới:

var existingObject = [{name: 'email',value: '[email protected]'}, {name: 'phone',value: '123-123-1234'}]; 
var selectedObject = _.map(existingObject, function(obj) { 
    var retObj = { }; 
    retObj[obj["name"]] = obj["value"]; 
    return retObj; 
}); 

console.log(selectedObject); 
3

Array.prototype.reduce là khá gọn gàng cho loại thao tác:

var items = [{name: 'email',value: '[email protected]'}, {name: 'phone',value: '123-123-1234'}] 

var data = items.reduce(function (result, item) { 
    result[item.name] = item.value; 

    return result; 
}, {}); 
+0

Tôi nghĩ rằng đây là cách thanh lịch và đơn giản nhất để giải quyết vấn đề này. –

Các vấn đề liên quan