2011-08-05 42 views
5
var addObjectResponse = [{ 
    'DateTimeTaken': '/Date(1301494335000-0400)/', 
    'Weight': 100909.090909091, 
    'Height': 182.88, 
    'SPO2': '222.00000', 
    'BloodPressureSystolic': 120, 
    'BloodPressureDiastolic': 80, 
    'BloodPressurePosition': 'Standing', 
    'VitalSite': 'Popliteal', 
    'Laterality': 'Right', 
    'CuffSize': 'XL', 
    'HeartRate': 111, 
    'HeartRateRegularity': 'Regular', 
    'Resprate': 111,  
    'Temperature': 36.6666666666667, 
    'TemperatureMethod': 'Oral',  
    'HeadCircumference': '',  
}]; 

Đây là một đối tượng mẫu mà tôi đang nhận được từ phía sau, bây giờ tôi muốn thay đổi thứ tự của đối tượng. Tôi không muốn sắp xếp theo tên hoặc kích thước ... tôi chỉ muốn thay đổi thứ tự theo cách thủ công ...Thay đổi thứ tự của các phím Đối tượng ....

+0

bạn sẽ nhận được một lỗi với phản ứng đó, bởi vì 'HeadCircumference' : '', không nên có dấu phẩy thừa –

+3

Bạn muốn thay đổi thứ tự của các cặp khóa/giá trị? Tại sao? – alnorth29

+0

bản sao có thể có của [Thứ tự các yếu tố - cho (... trong ...) vòng lặp trong javascript] (http://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript) –

Trả lời

0

nếu bạn muốn sắp xếp lại theo cách thủ công. chỉ cần tạo đối tượng mới và gán các giá trị bằng cách sử dụng đối tượng cũ.

var newObject= [{ 
    'DateTimeTaken': addObjectResponse.DateTimeTaken, 
    'Weight': addObjectResponse.Weight, 
    'Height': addObjectResponse.Height, 
    'SPO2': addObjectResponse.SPO2 
}]; 
+11

Điều đó không có thứ tự nhiều hơn đối tượng gốc. Các thuộc tính đối tượng không có thứ tự liệt kê nhất quán trong JavaScript. –

+3

Có thể có trường hợp sử dụng khi điều này là cần thiết, chẳng hạn như hiển thị đối tượng có thư viện templating – amigolargo

1

Tôi nghĩ điều đó không thể thực hiện được trong JavaScript.

Bạn có thể tạo một mảng chứa tên trường theo thứ tự của bạn và bạn có thể lặp qua mảng này và tìm nạp các trường từ đối tượng thực tế.

+0

Istvan: tôi đã làm điều đó, nhưng giá trị hiện đang được thay thế theo thứ tự khác nhau ... –

+0

@ John: Tôi không hiểu nhận xét của bạn . –

9

Bạn không thể đặt các cặp khóa/giá trị đối tượng JavaScript. Nó được lưu trữ ở định dạng nội bộ riêng của nó, vì vậy bạn không bao giờ nên dựa vào thứ tự của điều đó. Trong JS, mọi thứ đều là một Object, ngay cả một Array. Vì vậy, đôi khi bạn có thể giới thiệu các lỗi khi sử dụng ký hiệu mảng và chú thích đối tượng cùng nhau (for x in var)

+2

trong khi điều này là đúng, điều này không giống với việc sử dụng trong thế giới thực, nơi các mẫu thường được hiển thị bằng cách lặp qua các thuộc tính đối tượng. Và khi bạn lặp lại chúng, chúng có một trật tự. Thay đổi thứ tự này là ... mong manh, nhưng IMO cần được thêm vào. – ProblemsOfSumit

0

Chỉ cần tham khảo các phím đối tượng theo thứ tự mà bạn thích:

aKeys = [ 
    addObjectResponse[0].DateTimeTaken, 
    addObjectResponse[0].Weight, 
    addObjectResponse[0].Height, 
    ...etc... 
] 
5

Thuộc tính của một đối tượng trong JavaScript không có một đơn đặt hàng. Có thể có vẻ như là một thứ tự trong một số trình duyệt nhưng đặc tả ECMAScript xác định thứ tự liệt kê thuộc tính đối tượng như đang được triển khai cụ thể, do đó bạn không nên giả định hành vi của một trình duyệt sẽ giống như của một trình duyệt khác. Ví dụ: Chrome không sử dụng cùng một thứ tự như một số trình duyệt khác: xem this lengthy bug report ít nhất là nhiều cuộc thảo luận về vấn đề này khi bạn có thể muốn.

Nếu bạn cần một thứ tự cụ thể, hãy sử dụng một mảng hoặc hai mảng (một cho khóa và một cho giá trị).

5

Tôi đã viết thuật toán nhỏ này cho phép di chuyển các phím, giống như phương thức jQuery .insertAfter(). Bạn phải cung cấp:

//currentKey: the key you want to move 
//afterKey: position to move-after the currentKey, null or '' if it must be in position [0] 
//obj: object 


function moveObjectElement(currentKey, afterKey, obj) { 
    var result = {}; 
    var val = obj[currentKey]; 
    delete obj[currentKey]; 
    var next = -1; 
    var i = 0; 
    if(typeof afterKey == 'undefined' || afterKey == null) afterKey = ''; 
    $.each(obj, function(k, v) { 
     if((afterKey == '' && i == 0) || next == 1) { 
      result[currentKey] = val; 
      next = 0; 
     } 
     if(k == afterKey) { next = 1; } 
     result[k] = v; 
     ++i; 
    }); 
    if(next == 1) { 
     result[currentKey] = val; 
    } 
    if(next !== -1) return result; else return obj; 
} 

Ví dụ:

var el = {a: 1, b: 3, c:8, d:2 } 
el = moveObjectElement('d', '', el); // {d,a,b,c} 
el = moveObjectElement('b', 'd', el); // {d,b,a,c} 
+0

Tôi thích những người không thể thực hiện những điều không thể. – ar2015

4

Bạn có thể sử dụng Object.keys():

var obj = { 
    a: 1, 
    b: 2, 
    c: 4 
}; 

var new_obj = {}; 

Object.keys(obj) 
.sort(function(a, b) { 
    /** Insert your custom sorting function here */ 
    return a - b; 
}) 
.forEach(function(key) { 
    new_obj[key] = obj[key]; 
}); 

obj = new_obj; 
Các vấn đề liên quan