javascript – 对象数组的自定义排序顺序

前端之家收集整理的这篇文章主要介绍了javascript – 对象数组的自定义排序顺序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道我们可以定义json对象数组的自定义排序函数.但是,如果订单既不是desc也不是asc.例如,假设我的数组看起来像:
  1. [ {
  2. name: 'u'
  3. },{
  4. name: 'n'
  5. },{
  6. name: 'a'
  7. },{
  8. name: 'n',}
  9. ]

输出应如下所示:

  1. [ {
  2. name: 'n'
  3. },{
  4. name: 'u',}
  5. ]

所有以n开头的名称首先排序,然后排序.我尝试了以下自定义排序功能

  1. _sortByName(a,b){
  2. if (a.name === 'n'){
  3. return 1;
  4. } else if(b.name === 'n'){
  5. return 1;
  6. } else if(a.name < b.name){
  7. return 1;
  8. } else if(a.name > b.name){
  9. return -1;
  10. }
  11. }

但是返回对象的顺序是错误的.这里出了什么问题?

解决方法

如果您有任意排序顺序,一个选项是将订单分配给数组,然后使用indexOf:
  1. var sortOrder = ['n','a','u'];
  2. var myArray = [{
  3. name: 'u'
  4. },{
  5. name: 'n'
  6. }
  7. ];
  8. myArray.sort(function(a,b) {
  9. return sortOrder.indexOf(a.name) - sortOrder.indexOf(b.name);
  10. });
  11.  
  12. console.log(myArray);

如果在任一数组中有许多值,则首先创建值索引映射然后使用sortOrder [a.name]可能是值得的.

猜你在找的JavaScript相关文章