在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  Linux  HTML/ 如何用js對json數(shù)據(jù)進行二次排序?

如何用js對json數(shù)據(jù)進行二次排序?

比如:

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

先根據(jù) value 的第一個參數(shù)排序,

結(jié)果如下:

{5: [5, 5], 1: [4, 7], 3: [4, 9], 2: [2, 6], 4: [1, 8]}
發(fā)現(xiàn)有相同,再根據(jù)第二個參數(shù)進行內(nèi)部排序。
結(jié)果如下:

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

ps:用python和php都比較簡單的解決,但是js似乎困難

回答
編輯回答
法克魷

你這個題目有點問題吧,你對一個對象的鍵排序有啥意義,鍵值對的訪問時間復雜度就是O(1)的,你如果是數(shù)組的話我可以理解。

var a = {1: [4, 7], 2: [2, 6], 3: [4, 9], 4: [1, 8], 5: [5, 5]}
var array = []
var result = {}
var i = 0

Object.keys(a).forEach(function(key){
  array.push({
    key: key,
    value: a[key]
  })
})
console.log(array)

array = array.sort(function(a,b) {
  if (a.value[0] === b.value[0]) {
    return a.value[1] - b.value[1]
  }
  return a.value[0] - b.value[0]
})

console.log(array)

for (var i = 0; i < array.length; i++) {
  result[array[i].key] = array[i].value
}


console.log(a)
console.log(result)
2017年1月26日 04:50
編輯回答
落殤
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) => {
    let obj = {};
    obj[attr] = JSON.parse(JSON.stringify(a[attr]));
    arr.push(obj);
});
// 上面為改變數(shù)據(jù)結(jié)構(gòu),對象轉(zhuǎn)數(shù)組;
function compare(a, b) {
    let valueA = a[Object.keys(a)[0]],
        valueB = b[Object.keys(b)[0]];
    if (valueA[0] < valueB[0]) {
        return -1;
    } else if (valueA[0] > valueB[0]) {
        return 1;
    } else {
        return valueA[1] < valueB[1] ? -1 : 1;
    }
}

console.log(arr.sort(compare));

這個數(shù)據(jù)結(jié)構(gòu)有問題,上面代碼的1/3就是用來改數(shù)據(jù)結(jié)構(gòu)的,一般數(shù)據(jù)結(jié)構(gòu)會是這樣子:

如果不確定第一個鍵是否是數(shù)字的話:

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

如果第一個鍵肯定是數(shù)字:

[ [ 4, 7 ] 
  [ 2, 6 ] 
  [ 4, 9 ] 
  [ 1, 8 ] 
  [ 5, 5 ] ]
2017年8月9日 08:45