猿问

如何用js对json数据进行二次排序?

比如:

a = {1: [4, 7], 2: [2, 6], 3: [4, 9], 4: [1, 8], 5: [5, 5]}

先根据 value 的第一个参数排序,

结果如下:

{5: [5, 5], 1: [4, 7], 3: [4, 9], 2: [2, 6], 4: [1, 8]}
发现有相同,再根据第二个参数进行内部排序。
结果如下:

{5: [5, 5], 3: [4, 9], 1: [4, 7], 2: [2, 6], 4: [1, 8]}
这个就不知道怎么解决了?

ps:用python和php都比较简单的解决,但是js似乎困难


慕无忌1623718
浏览 1226回答 2
2回答

天涯尽头无女友

你这个题目有点问题吧,你对一个对象的键排序有啥意义,键值对的访问时间复杂度就是O(1)的,你如果是数组的话我可以理解。var a = {1: [4, 7], 2: [2, 6], 3: [4, 9], 4: [1, 8], 5: [5, 5]}var array = []var result = {}var i = 0Object.keys(a).forEach(function(key){&nbsp; array.push({&nbsp; &nbsp; key: key,&nbsp; &nbsp; value: a[key]&nbsp; })})console.log(array)array = array.sort(function(a,b) {&nbsp; if (a.value[0] === b.value[0]) {&nbsp; &nbsp; return a.value[1] - b.value[1]&nbsp; }&nbsp; return a.value[0] - b.value[0]})console.log(array)for (var i = 0; i < array.length; i++) {&nbsp; result[array[i].key] = array[i].value}console.log(a)console.log(result)

慕斯王

let a = { 1: [4, 7], 2: [2, 6], 3: [4, 9], 4: [1, 8], 5: [5, 5] };let arr = [];Object.getOwnPropertyNames(a).forEach((attr, index) => {&nbsp; &nbsp; let obj = {};&nbsp; &nbsp; obj[attr] = JSON.parse(JSON.stringify(a[attr]));&nbsp; &nbsp; arr.push(obj);});// 上面为改变数据结构,对象转数组;function compare(a, b) {&nbsp; &nbsp; let valueA = a[Object.keys(a)[0]],&nbsp; &nbsp; &nbsp; &nbsp; valueB = b[Object.keys(b)[0]];&nbsp; &nbsp; if (valueA[0] < valueB[0]) {&nbsp; &nbsp; &nbsp; &nbsp; return -1;&nbsp; &nbsp; } else if (valueA[0] > valueB[0]) {&nbsp; &nbsp; &nbsp; &nbsp; return 1;&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return valueA[1] < valueB[1] ? -1 : 1;&nbsp; &nbsp; }}console.log(arr.sort(compare));这个数据结构有问题,上面代码的1/3就是用来改数据结构的,一般数据结构会是这样子:如果不确定第一个键是否是数字的话:[ { '1': [ 4, 7 ] },&nbsp; { '2': [ 2, 6 ] },&nbsp; { '3': [ 4, 9 ] },&nbsp; { '4': [ 1, 8 ] },&nbsp; { '5': [ 5, 5 ] } ]如果第一个键肯定是数字:[ [ 4, 7 ]&nbsp;&nbsp; [ 2, 6 ]&nbsp;&nbsp; [ 4, 9 ]&nbsp;&nbsp; [ 1, 8 ]&nbsp;&nbsp; [ 5, 5 ] ]
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答