Сортировать элементы объекта в Javascript - PullRequest
0 голосов
/ 05 марта 2019

У меня есть такой объект:

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

Я должен отсортировать имена.После сортировки имен метки должны совпадать по именам.

Когда я использую функцию sort (), она сортирует только имена.Как я могу отсортировать мой общий объект?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Вы можете создать другой ключ по имени rel, и его значением будет массив объектов, где у каждого объекта есть ключи по имени name & mark.

. При создании этого массива вы можетеиспользуйте функцию 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)
0 голосов
/ 05 марта 2019

Один из вариантов - изменить структуру данных, чтобы она была более сортируемой.Например:

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]}`)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...