首页 > 解决方案 > 当它们是整数时保留javascript键顺序

问题描述

我一直在做一些阅读,可能错过了明显的东西,但我认为我没有。

我有以下代码:

var res = JSON.parse('{"products":{"0":"Please Select","2":"Example 1","3":"Example 2","4":"Example 3","5":"Example 4","88":"Example 5","7":"Example 6","8":"Example 7"}}');

for (key in res.products){
  $('#myList').append('<option value="'+key+'">'+res.products[key]+'</option>');
}

我想<select>使用 Jquery 添加到一个简单的空元素中。

https://jsfiddle.net/htrdzyqo/

但是,命令将示例 5 放在底部而不是正确的位置。阅读后,我意识到对象键没有正确排序(按键排序 JavaScript 对象)并且 JSON 键不能是整数(按键排序 JavaScript 对象)。我需要保留对象顺序而不是自动排序。原因是它的 ID 必须保持不变(因此没有 Array 替代方案)。

我错过了一些简单的事情还是需要重新考虑/工作?

标签: javascriptjqueryjson

解决方案


在 JSON 中,根据定义,对象 中的名称/值对{}是无序的:它们没有特定的出现顺序。另一方面,在列表中,顺序被保留。 []

另请参阅this other StackOverflow question,其中答案引用了官方文档

正如@Bergi 在评论中已经指出的那样,将产品放入列表是正确的解决方案。

JSON.parse('{"products": [ {"key": 0, "text": "Please Select"}, {"key": 2, "text": "Example 1"}, ... ]}');

for (let product of res.products) {
  $('#myList').append('<option value="'+product.key+'">'+product.text+'</option>');
}

推荐阅读