JavaScript按值排序

JavaScript按值排序,javascript,jquery,arrays,sorting,object,Javascript,Jquery,Arrays,Sorting,Object,如何按键“名称”排序?(按字母顺序排列) 它不起作用: views.sort(function(a, b) { var x = a.name.toLowerCase(), y = b.name.toLowerCase(); return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }) views.sort(函数(a,b){ var x=a.name.toLowerCase(), y=b.name.toLowerCase(); 回报

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

它不起作用:

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

请帮助我。

您可以使用
localeCompare
来比较字符串:

var视图={
viewA:{name:'Build Plus'},
viewB:{name:'列'},
viewC:{name:'PowerPack Templates',other:'field'},
viewD:{name:'Blog Posts'}
};
var viewsArr=Object.keys(views).map(函数(键){返回视图[key];});
viewsArr.sort(函数(a,b){
var x=a.name.toLowerCase(),
y=b.name.toLowerCase();
返回x.localeCompare(y);
})

console.log(viewsArr)这不是确切的代码,但在您的团队中,您无法获得

 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);
});

您共享的代码完全正常,下面是工作示例:

var-arr=[
{name:'b'},
{name:'a'},
{name:'x'},
{name:'i'},
{name:'l'}
]
arr.sort(函数(a,b){
var x=a.name.toLowerCase(),
y=b.name.toLowerCase();
回报率((xy)?1:0);
});

console.log(arr)
获取数组中的对象值并进行排序

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

定义“不工作”。具体说明你的期望和它给你的。
sort
是否返回已排序的列表或对其进行适当的修改?我不记得了。如果那是
视图
变量的日志,那不是数组,而是常规对象。它没有
sort()
函数,也不能对对象的排序properties@Carcigenicate我的代码不支持排序。它就是不起作用。我认为没问题,但它不起作用。你的排序函数是正确的,问题出在其他地方,请提供更多关于你正在排序的对象的代码。你能发布示例数组吗?我认为你没有得到数组name@PatrickEvans,是的,我刚刚添加了一个工作示例,OP可以通过它查看,它的编写方式这无助于教OP或其他用户什么是错误的,以及需要什么来修复问题。@PatrickEvans,OP的代码完全正常,可能问题在代码中的其他地方,OP没有共享。正确。。。所以你的答案不能回答任何问题。。。哪个是我的point@PatrickEvans,我根据OP的共享代码写了我的答案,并说,他/她的共享代码完全可以,问题可能在其他地方。变量可以在列表中声明,即
var a=3,b=4,c=4OP就是这么做的,他们只是把第二个声明放在另一行,应该可以工作,我把你的数据示例放在代码片段中-看看哦,我知道。无法对其进行排序,因为对象的键无法排序。您需要首先在数组中转换它。@user3608884实际上,它看起来很奇怪:在您发布的屏幕截图上,您有一个集合,但集合中的每个项都有一个键(如object)。你能发布你的对象/集合是什么样子的吗?谢谢,但我的解决方案是:
var views\u new={};Object.values(views).sort(函数(a,b){var x=a.name,y=b.name;return((xy)?1:0));}).forEach(函数(v,i){views\u new[v.handle]=v;})很高兴你能找到答案。