sử dụng Lodash để sắp xếp mảng đối tượng theo giá trị


97

Tôi đang cố gắng sắp xếp một mảng theo giá trị 'tên' (sử dụng Lodash). Tôi đã sử dụng tài liệu Lodash để tạo giải pháp bên dưới, tuy nhiên .orderBy dường như không có bất kỳ ảnh hưởng nào. Bất cứ ai có thể làm sáng tỏ một số cách chính xác để sắp xếp mảng?

Mảng ký tự

[  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]

Mã chức năng

 var chars = this.state.characters;

 _.orderBy(chars, 'name', 'asc'); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})

Câu trả lời:


191

Phương thức orderBynày không thay đổi mảng đầu vào, bạn phải gán kết quả cho mảng của mình:

var chars = this.state.characters;

chars = _.orderBy(chars, ['name'],['asc']); // Use Lodash to sort array by 'name'

 this.setState({characters: chars})

hmmm, dường như vẫn không sắp xếp mảng. Không chắc chắn nếu tôi nên cập nhật câu hỏi hoặc thực hiện một cái mới

1
Cập nhật các câu trả lời, có lẽ lỗi của bạn là do đi qua hai tham số thay vì một mảng cho'name', 'asc'
Artemis trẻ

1
" orderBykhông thay đổi mảng đầu vào" ... " orderBythay đổi mảng tại chỗ." Từ ngữ dự định có thể là "không đúng chỗ" hoặc "không đúng chỗ". Xem: en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian

Trên thực tế bạn nói đúng, tôi chỉ lấy câu này vì nó bổ sung gì để câu trả lời
Artemis trẻ

Đó là tham số thứ hai ['asc']không thứ tự tăng dần, để đạt được điều đó đường đi sẽ có thêm một reverse()sau orderBy(ít nhất là trong phiên bản 4.17.15)
Diego Ortiz

60

Bạn có thể sử dụng lodash sortBy ( https://lodash.com/docs/4.17.4#sortBy ).

Mã của bạn có thể như sau:

const myArray = [  
   {  
      "id":25,
      "name":"Anakin Skywalker",
      "createdAt":"2017-04-12T12:48:55.000Z",
      "updatedAt":"2017-04-12T12:48:55.000Z"
   },
   {  
      "id":1,
      "name":"Luke Skywalker",
      "createdAt":"2017-04-12T11:25:03.000Z",
      "updatedAt":"2017-04-12T11:25:03.000Z"
   }
]

const myOrderedArray = _.sortBy(myArray, o => o.name)

32
Bạn cũng có thể sử dụng tốc ký:_.sortBy(myArray, 'name')
n’t

7
So với orderBy, bạn không thể chuyển kiểu sắp xếp vào sortBy, nó luôn sắp xếp theo thứ tự tăng dần.
a_rahmanshah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.