按子对象属性值排序对象属性

时间:2015-11-07 14:55:13

标签: javascript node.js sorting object

我有一个解决方案,但我对实施并不满意。

想在这里得到一些关于如何改进的反馈,无论是排序还是数据结构。

我想要做的是通过一个子对象属性值对对象的属性进行排序。

我的数据结构如下:

对象叫冠军:

{ '32': { played: 1, image: 'Amumu.png', won: 0 },
  '60': { played: 5, image: 'Elise.png', won: 3 },
  '79': { played: 4, image: 'Gragas.png', won: 3 },
  '245': { played: 1, image: 'Ekko.png', won: 0 },
  '254': { played: 2, image: 'Vi.png', won: 1 },
  '421': { played: 2, image: 'RekSai.png', won: 0 },
  // order is an array where I pushed all the objects image values
  order: 
   [ 'Amumu.png',
     'Elise.png',
     'RekSai.png',
     'Ekko.png',
     'Gragas.png',
     'Vi.png' ]
}

现在我想创建一个排序顺序,按图像名称的字母顺序对对象进行排序。

这就是我现在正在做的事情:

champions.order.sort(); // sorts the order array alphabetically
// loops to replace the strings of the order array with the
// corresponding parent object keys
for(var j =0; j < champions.order.length; j++){
    for(var k in champions){
        if(k != "order"){
            if(champions.order[j] === champions[k].image){
                champions.order[j] = k;
            }
        }
     }
};

这为我提供了对象顺序属性所需的结果:

{ '32': { played: 1, image: 'Amumu.png', won: 0 },
  '60': { played: 5, image: 'Elise.png', won: 3 },
  '79': { played: 4, image: 'Gragas.png', won: 3 },
  '245': { played: 1, image: 'Ekko.png', won: 0 },
  '254': { played: 2, image: 'Vi.png', won: 1 },
  '421': { played: 2, image: 'RekSai.png', won: 0 },
  order: [ '32', '245', '60', '79', '421', '254' ] }

任何想法,如果这可以更容易实现?或者使用其他数据结构?

1 个答案:

答案 0 :(得分:1)

尝试使用Object.keys()

  var res = Object.keys(champions).slice(0, -1).sort(function(a, b) {
      return champions[a].image.toLowerCase() > champions[b].image.toLowerCase() ? 1 : 0
  })