Как отсортировать объект по значению, но при этом иметь доступ к ключам объекта в функции отображения? - PullRequest
1 голос
/ 09 марта 2020

По сути, у меня есть объект, который выглядит следующим образом.

 var obj = {cat: "Cat",
 dog: "Dog",
 long: "Long",
 modified_r: "Date Last",}
 mal: "Mal"}`

Что я хочу сделать, так это отобразить объект и отсортировать его по значению, но при этом иметь доступ к ключам объекта.

На данный момент у меня есть

let sorted = Object.entries(obj).sort().map((value) => {
    return {value: value[0], label: value[1]}
});

Это сортирует объект по его ключам и затем возвращает массив объектов, подобных этому.

0: {label: "cat", value: "Cat"}
1: {label: "dog", value: "Dog"}
2: {label: "long", value: "Long"}
3: {label: "mal", value: "Mal"}
4: {label: "modified_r", value: "Date Last"}

Что я хочу сделать, это вернуть массив объектов, отсортированных в алфавитном порядке по его значению, как это.

 0: {label: "cat", value: "Cat"}
 1: {label: "modified_r", value: "Date Last"}
 2: {label: "dog", value: "Dog"}
 3: {label: "long", value: "Long"}
 4: {label: "mal", value: "Mal"}

Я пытался отобразить объект, используя Object.values(selectOptions).sort().map((value) => {} , Это сортирует объекты по значениям, таким как я хочу, однако у меня нет доступа к ключам объектов в этой функции отображения, поэтому я не могу вернуть массив объектов в нужном мне формате.

Каков наилучший способ сопоставления объекта, сортирующего его по значениям, при этом все еще имея доступ к ключам объектов?

Ответы [ 2 ]

2 голосов
/ 09 марта 2020

const obj = {
  "key1": "value3",
  "key2": "value2",
  "key3": "value1"
}

let sortedByKey = Object.entries(obj).sort((a,b) => (a[0] < b[0]) ? -1 : 1).map((value) => {
    return {label: value[0], value: value[1]}
});

let sortedByValue = Object.entries(obj).sort((a,b) => (a[1] < b[1]) ? -1 : 1).map((value) => {
    return {label: value[0], value: value[1]}
});

console.log(sortedByKey);
console.log(sortedByValue);
0 голосов
/ 09 марта 2020

Вы можете использовать компаратор в функции сортировки для сортировки по значению.

let sorted = Object.entries(obj).sort((a,b) => {
  return a[1].localeCompare(b[1]);
}).map((value) => {
    return {value: value[0], label: value[1]}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...