由于无法获得原始顺序的JSON文件,因此我想再次在JS中对其进行排序。该文件如下所示:
{
"index": 5,
"timestamp": 1570438008,
"data": {
"12": [
"Title 2",
"Description 2"
],
"10": [
"Title 1",
"Description 1"
]
}
}
如果我现在从JS访问此JSON文件,则会收到不同于原始订单的其他订单:
$.ajax({
url: '../json/smiirl_data.json',
dataType: 'json',
success: function(response) {
console.log(response['data']);
}
});
JS的console.log显示:
{
"10": [
"Title 1",
"Description 1"
],
"12": [
"Title 2",
"Description 2"
]
}
可以排序(标题降序)吗?我需要原始顺序(12,10)。
答案 0 :(得分:1)
首先,您需要将对象序列化为数组,然后再使用sort函数对其进行排序。
var array = [],
data = response['data'];
for (var array in data ) {
array.push([array, data[vehicle]]);
}
array.sort(function(a, b) {
return b[1] - a[1];
});
答案 1 :(得分:0)
因为不能总是保证对象保持顺序,并且JSON不支持保证顺序的Map类,所以应该改用数组,该数组包含两个元素:键和值。
例如:
"data": [
[12, ["Title 2", "Description 2"],
[10, ["Title 1", "Description 1"]
]
您可以通过以下方式访问它:
for(let item of myJSON.data)
{
console.log('Key:', item[0]);
console.log('Value:', item[1]);
}
答案 2 :(得分:0)
为保证顺序,请将数据重新构造为二维数组。
您可以创建索引图和查找功能,以使数据更易于查询。
let data = {
"index": 5,
"timestamp": 1570438008,
"data": [
[ "12", [ "Title 2", "Description 2" ] ],
[ "10", [ "Title 1", "Description 1" ] ]
]
}
let indexMap = indexLookupMap(data.data); // Build an index
console.log(lookupEntry(data.data, indexMap, '10')); // Find entry with id '10'
data.data.forEach(entry => {
console.log(`key => ${entry[0]}, value => ${entry[1].join(', ')}`);
})
function lookupEntry(data, indexMap, id) {
return data[indexMap[id]][1];
}
function indexLookupMap(data) {
return data.reduce((dict, entry, idx) => Object.assign(dict, { [entry[0]]: idx }), {});
}
.as-console-wrapper { top: 0; max-height: 100% !important; }