Как вернуть объект JSON с помощью цифровых клавиш - PullRequest
1 голос
/ 12 июня 2019

Я новичок в программировании на JavaScript, и у меня болит голова, когда я пытаюсь понять, как поменять ключи одного JSON-объекта. Это объект, который я пытаюсь повернуть вспять:

{70: "a",
276: "b ", 
277: "c ", 
688: "d", 
841: "e", 
842: "f", 
843: "g", 
1078: "h", 
1079: "i"} 

Я запускаю этот код на локальном хосте. Я анализирую console.logs с помощью инструментов разработчика Google Chrome (F12). Я также могу использовать Jquery в этом скрипте.

Это то, что я пробовал до сих пор:

//The object is stored in a variable called json
var json = 
{70: "a",
276: "b ", 
277: "c ", 
688: "d", 
841: "e", 
842: "f", 
843: "g", 
1078: "h", 
1079: "i"}; 

var entries = Object.entries(json);

entries.reverse();

var newjson = Object.fromEntries(entries);

console.log(newjson);

Когда я запускаю этот код, вывод совпадает со старой переменной json, он не изменяется.

А это ожидаемое console.log()

{ 1079: "i",
  1078: "h", 
  843: "g", 
  842: "f",
  841: "e", 
  688: "d",  
  277: "c",
  276: "b",
  70: "a",
}

Большое спасибо всем, кто пытается мне помочь.

Ответы [ 3 ]

0 голосов
/ 12 июня 2019

Надеюсь, это поможет. Я даже не уверен насчет производительности. Не стесняйтесь голосовать, пока вы оставляете мне обратную связь.

Допустим, у вас есть json var:

const reversedKeys = Object.keys(json).reverse();
const reversedJson = reversedKeys.map(e => ({[e]: json[Number(e)]}) );
0 голосов
/ 12 июня 2019

Как сказал adam-lassek в этом посте Ассоциативные массивы Javascript неупорядочены.Вы должны написать свою собственную функцию для обратного массива, как это делали yossi-neiman в этой записи

0 голосов
/ 12 июня 2019

Учтите, что порядок элементов в объекте НЕ сохраняется. На практике объект JavaScript представляет собой словарь , где данные не хранятся в последовательном порядке, например, в массиве, и доступ к значениям осуществляется с использованием хеш-функции, которая принимает ключ в качестве входных данных и - в в упрощенном смысле дает «положение» значения внутри структуры.

Словарь - это структура данных, которая НЕ сохраняет порядок (тем не менее, он обеспечивает быстрый поиск данных посредством индексации), не в JavaScript или на любом другом языке программирования.

Я предлагаю использовать массив для сохранения порядка.

Может быть, вам подойдет массив с различными объектами. Затем вы можете отсортировать массив по ключу объекта. Вот "фиктивный" пример:

var arr = [{1: "Test1"}, {2: "Test2"}]
arr.sort((obj1, obj2) => {
  return Object.keys(obj2)[0] - Object.keys(obj1)[0];
});
...