Cletus nói là chính xác, nhưng theo kinh nghiệm của tôi, hầu hết các trình duyệt sẽ duy trì thứ tự. Điều đó đang được nói, bạn nên cân nhắc sử dụng một số Array
. Nếu bạn cần phải sắp xếp nó một khi bạn nhận được nó trên client-side, chỉ cần sử dụng .sort()
hàm trong JavaScript:
rows.sort(function(a, b) {
return a.row_id - b.row_id;
}
Mặc dù nó có vẻ như nó hoạt động, thứ tự của các thuộc tính trong một đối tượng không thể được tính trên. Xem nhiều ý kiến dưới đây để biết thêm thông tin (mắt thông minh hơn tôi). Tuy nhiên, đây là đoạn code tôi sử dụng để kiểm tra các hành vi trong thử nghiệm hạn chế của riêng tôi:
var test = {
one: 'blah',
two: 'foo',
another: 'bar'
};
for (prop in test) {
document.write(prop + "<br />");
}
Prints (trong Firefox 3.6.3 và 5.0.375.9 Chrome):
one
two
another
Ngoài ra, bạn có thể muốn chắc chắn rằng bạn đang nhận được loại mã hóa JSON bạn cần quay trở lại từ json_encode()
, chẳng hạn như một đối tượng (sử dụng các dấu ngoặc nhọn {}
) và không phải là mảng ([]
dấu ngoặc ôm). Bạn có thể cần phải vượt qua JSON_FORCE_OBJECT
đến json_encode()
để ép buộc.
- Edited để làm rõ rằng cách tiếp cận
Array
là ưa thích)
- Edited một lần nữa (xin lỗi), như tôi đã bỏ qua lời nhận xét của pcorcoran, trong đó có một liên kết đến một vấn đề trong theo dõi vấn đề của Chromium về vấn đề này. Đủ để nói, thứ tự các thuộc tính của đối tượng là không phải là đáng tin cậy.
Đã thất bại trên Opera và Chrome, và hành vi ở nơi khác có thể thay đổi khi các công cụ JS tiếp tục được tối ưu hóa. Đừng dựa vào thứ tự Object: đi cho Array. – bobince
Dường như nó hoạt động với tôi trong Chrome (5.0.375.9 trên Mac OS X) - bạn đang sử dụng một phiên bản khác hay bạn có một đoạn mã có thể khiến Chrome bỏ qua thứ tự? Tôi hầu như chỉ quan tâm đến quan điểm tò mò. Tôi đồng ý với bạn-- cách tiếp cận tốt nhất là sử dụng một mảng và '.sort()' nếu cần. – awgy
Nevermind-- đã bỏ qua nhận xét của pcorcoran bên dưới, liên kết với trình theo dõi vấn đề Chromium. – awgy