繁体   English   中英

在 Javascript 中对对象元素进行排序

[英]Sort Object Elements in Javascript

我有一个这样的对象:

 {
  "name":['John','Bob','Ram','Shyam'],
  "marks":['64','22','80','32']
 }

我必须对名字进行排序。 我排序名字后,必须根据名字匹配标记。

当我使用 sort() 函数时,它只对名称进行排序。 如何对整个对象进行排序?

一种选择是将您的数据结构更改为更易于排序。 例如:

 const data = { names: ['John','Bob','Ram','Shyam'], marks: ['64','22','80','32'] } const people = data.names.map((name, i) => ({ name, mark: data.marks[i] })) const sorted = people.sort((a, b) => a.name.localeCompare(b.name)) console.log(sorted)

第二种选择是保留索引数组,您可以根据数据对其进行排序。 这不会改变您的原始结构,但我认为这不是一个好的选择,因为很难同时保持名称和标记数组的同步。 例如:

 const data = { names: ['John','Bob','Ram','Shyam'], marks: ['64','22','80','32'] } const index = Array.from(Array(data.names.length).keys()) index.sort((a, b) => data.names[a].localeCompare(data.names[b])) console.log(index) // use the names & marks index.forEach(i => { console.log(`${data.names[i]} - ${data.marks[i]}`) })

您可以按名称rel创建另一个键,其值将是一个对象数组,其中每个对象都有名称namemark键。

创建此数组时,您可以使用sort函数按顺序对这些对象进行排序

 let obj = { "name": ['John', 'Bob', 'Ram', 'Shyam'], "marks": ['64', '22', '80', '32'] } obj.rel = obj.name.map(function(e, i) { return { name: e, mark: obj.marks[i] } }).sort((a, b) => a.name.localeCompare(b.name)) console.log(obj)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM