ใช้ Lodash เพื่อจัดเรียงอาร์เรย์ของวัตถุตามค่า


110

ฉันกำลังพยายามจัดเรียงอาร์เรย์ตามค่า 'ชื่อ' (โดยใช้ Lodash) ฉันใช้เอกสาร Lodash เพื่อสร้างโซลูชันด้านล่างอย่างไรก็ตาม .orderBy ดูเหมือนจะไม่มีผลกระทบใด ๆ เลย ใครช่วยชี้แนะวิธีจัดเรียงอาร์เรย์ที่ถูกต้องได้บ้าง

Chars Array

[  
   {  
      "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"
   }
]

รหัสฟังก์ชัน

 var chars = this.state.characters;

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

 this.setState({characters: chars})

คำตอบ:


217

วิธีorderByนี้ไม่เปลี่ยนอาร์เรย์อินพุตคุณต้องกำหนดผลลัพธ์ให้กับอาร์เรย์ของคุณ:

var chars = this.state.characters;

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

 this.setState({characters: chars})

อืมดูเหมือนจะยังไม่เรียงลำดับอาร์เรย์ ไม่แน่ใจว่าควรอัปเดตคำถามหรือสร้างคำถามใหม่

1
อัปเดตคำตอบบางทีข้อผิดพลาดของคุณอาจเกิดจากการส่งพารามิเตอร์สองตัวแทนที่จะเป็นอาร์เรย์สำหรับ'name', 'asc'
Artémis Young

1
" orderByไม่เปลี่ยนอาร์เรย์อินพุต" ... " orderByเปลี่ยนอาร์เรย์ในตำแหน่ง" ข้อความที่ตั้งใจไว้อาจ "ไม่อยู่ในสถานที่" หรือ "ไม่อยู่ที่ที่" ดู: en.wikipedia.org/wiki/In-place_algorithm
Dem Pilafian

ที่จริงคุณพูดถูกฉันเพิ่งลบประโยคนี้ออกไปเนื่องจากไม่มีคำตอบใด ๆ เพิ่มเติม
Artémis Young

พารามิเตอร์ที่สอง['asc']นั้นไม่ได้เรียงลำดับจากน้อยไปหามากเพื่อให้บรรลุวิธีนั้นคือการเพิ่มreverse()หลังorderBy(อย่างน้อยในเวอร์ชัน 4.17.15)
Diego Ortiz

65

คุณสามารถใช้ lodash sortBy ( https://lodash.com/docs/4.17.4#sortBy )

รหัสของคุณอาจเป็นดังนี้:

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)

33
คุณยังสามารถใช้ชวเลขได้:_.sortBy(myArray, 'name')
Don

9
เมื่อเทียบกับorderByคุณไม่สามารถส่งผ่านประเภทการจัดเรียงได้sortByโดยจะเรียงลำดับจากน้อยไปมากเสมอ
a_rahmanshah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.