JavaScript按值排序

时间:2017-09-27 21:54:42

标签: javascript jquery arrays sorting object

如何按键排序"名称"? (按字母顺序排列)

a busy cat

它不起作用:

views.sort(function(a, b) {
  var x = a.name.toLowerCase(),
      y = b.name.toLowerCase();
  return ((x < y) ? -1 : ((x > y) ? 1 : 0));
})

请帮帮我。

4 个答案:

答案 0 :(得分:0)

您使用localeCompare来比较字符串:

var views = {
  viewA: { name: 'Build Plus' },
  viewB: { name: 'Columns' },
  viewC: { name: 'PowerPack Templates', other: 'field' },
  viewD: { name: 'Blog Posts' }
};

var viewsArr = Object.keys(views).map(function (key) { return views[key]; });

viewsArr.sort(function(a, b) {
      var x = a.name.toLowerCase(),
          y = b.name.toLowerCase();
      return x.localeCompare(y);
    })
    
console.log(viewsArr);

更新:您正在接收带有键和值的对象。您需要先在数组中获取值,然后对它们进行排序。

请参阅Converting a JS object to an array using jQuery

在你的情况下,它将是:

var viewsArr = Object.keys(views).map(function (key) { return views[key]; });
// sort then

答案 1 :(得分:0)

您分享的代码完全没问题,以下是工作示例:

&#13;
&#13;
var arr = [
  {name: 'b'},
  {name: 'a'},
  {name: 'x'},
  {name: 'i'},
  {name: 'l'}
]

arr.sort(function(a, b) {
 var x = a.name.toLowerCase(),
     y = b.name.toLowerCase();
 return ((x < y) ? -1 : ((x > y) ? 1 : 0));
});

console.log(arr)
&#13;
&#13;
&#13;

有关sort的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

问题可能出在其他地方,在代码中,你没有分享。

答案 2 :(得分:0)

获取数组中的对象值并进行排序。

const viewsArr = Object.values(views)
             .sort((a, b) => a.name.lowerCase() > b.name.lowerCase());

答案 3 :(得分:-1)

这不是确切的代码,但在你身上你没有得到小组..

 let groups = Object.keys(data)
    .map(group => {
let records = Object.values(data[group])
        .map(record => ({
          name: record.name,
          group,
        }));
      return records;
    });
groups = [].concat(...groups);
  return groups.sort((a, b) => {
   return a.name.localeCompare(b.name);
});