如何在javascript中对对象列表数组进行排序?

如何在javascript中对对象列表数组进行排序?,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个包含对象列表的数组。 数组的每个值如下所示: 我想对名称进行排序:元素[ele].options.name 这是我正在努力做的,但不是为我工作 var sortedElements = elements.sort(function (a, b) { return a.options.name - b.options.name }); for (var ele in sortedEle

我有一个包含对象列表的数组。

数组的每个值如下所示:

我想对名称进行排序:
元素[ele].options.name

这是我正在努力做的,但不是为我工作

           var sortedElements = elements.sort(function (a, b) {
                return a.options.name - b.options.name
            });
            for (var ele in sortedElements) {
                if (sortedElements.hasOwnProperty(ele)) {
                    if (!sortedElements[ele].options.outOfNetworkFlag) {
                        if (sortedElements[ele].options.category === "person") {
                            assignCount++
                        }
                        if (sortedElements[ele].options.category === "unknown") {
                            unassignCount++
                        }
                    }
                    else {
                        oonCount++;
                    }

                    occupancylist += '<a href="#" class="elementLink"><li style="list-style: none" data-elementid="' + sortedElements[ele].options.elementId + '">' + sortedElements[ele].options.icon.options.html + ' ' + sortedElements[ele].options.name + '</li></a>';
                }
            }
var sortedElements=elements.sort(函数a,b){
返回a.options.name-b.options.name
});
用于(分拣设备中的var ele){
if(sortedElements.hasOwnProperty(ele)){
如果(!sortedElements[ele].options.outOfNetworkFlag){
if(sortedElements[ele].options.category==“person”){
分配计数++
}
if(sortedElements[ele].options.category==“未知”){
取消分配计数++
}
}
否则{
oonCount++;
}
职业列表+='';
}
}
请建议。

您只需使用

let src=[{options:{name:'bbb'}},{options:{name:'aaa'}}]
src.sort((a,b)=>a.options.name>b.options.name?1:-1)
console.log(src)您应该只使用

let src=[{options:{name:'bbb'}},{options:{name:'aaa'}}]
src.sort((a,b)=>a.options.name>b.options.name?1:-1)
console.log(src)您可以使用

var项目=[
{name:'saurabh'},
{name:'你好'},
{name:'jsbee'},
{name:'abc'}
];
//按名称排序
项目.排序(功能(a,b){
var nameA=a.name.toUpperCase();//忽略大小写
var nameB=b.name.toUpperCase();//忽略大小写
if(nameA名称B){
返回1;
}
//名字必须相等
返回0;
});
您可以使用

var项目=[
{name:'saurabh'},
{name:'你好'},
{name:'jsbee'},
{name:'abc'}
];
//按名称排序
项目.排序(功能(a,b){
var nameA=a.name.toUpperCase();//忽略大小写
var nameB=b.name.toUpperCase();//忽略大小写
if(nameA名称B){
返回1;
}
//名字必须相等
返回0;
});

使用如下功能进行排序:

objs.sort((a,b) => (a.options.name > b.options.name) ? 1 : ((b.options.name > a.options.name) ? -1 : 0)); 
当然,您可以在排序函数中使用
toUpperCase()
(或更低版本)

objs.sort((a,b) => (a.options.name.toUpperCase() > b.options.name.toUpperCase()) ? 1 : ((b.options.name.toUpperCase() > a.options.name.toUpperCase()) ? -1 : 0)); 

使用
排序
功能如下:

objs.sort((a,b) => (a.options.name > b.options.name) ? 1 : ((b.options.name > a.options.name) ? -1 : 0)); 
当然,您可以在排序函数中使用
toUpperCase()
(或更低版本)

objs.sort((a,b) => (a.options.name.toUpperCase() > b.options.name.toUpperCase()) ? 1 : ((b.options.name.toUpperCase() > a.options.name.toUpperCase()) ? -1 : 0)); 


不能从另一个字符串中减去一个字符串。要比较字符串,请使用
.localeCompare()
返回a.options.name.localeCompare(b.options.name)谢谢Pointy,这是100%@Pointy是的,在大多数情况下,您可以使用ascii进行排序。如果存在除
[a-zA-Z0-9]
@mplungjan以外的字符,则需要使用localeCompare。好的,我同意这通常很好,但比较需要考虑相等的排序键,这一点仍然是事实。@mplungjan确实,根据我个人的经验,我不必处理除拉丁语1以外的任何内容,但
.localeCompare()
非常方便,而且我确信它不会做任何看似错误的事情。你不能从另一个字符串中减去一个字符串。要比较字符串,请使用
.localeCompare()
返回a.options.name.localeCompare(b.options.name)谢谢Pointy,这是100%@Pointy是的,在大多数情况下,您可以使用ascii进行排序。如果存在除
[a-zA-Z0-9]
@mplungjan以外的字符,则需要使用localeCompare。好的,我同意这通常很好,但比较需要考虑相等的排序键,这一点仍然是事实。@mplungjan确实,根据我个人的经验,我不必处理除拉丁语1以外的任何内容,但
.localeCompare()
非常方便,而且我很确定它不会做任何看似错误的事情。不,这是不对的。排序比较器必须返回一个数字,而不是布尔值。除了修复答案以避免出错外,此答案还需要一个解释。@mplungjan请谨慎编辑:在您的(第一个)中编辑您破坏了作者的改进。我同意Pointy:不要破坏作者的改进。如果比较器没有为相等字符串返回0,它将混淆排序算法。不,这是不正确的。排序比较器必须返回一个数字,而不是布尔值。除了修复答案以避免出错外,此答案还需要一个解释。@mplungjan请谨慎编辑:在您的(第一个)中编辑您破坏了作者的改进。我同意Pointy:不要破坏作者的改进。如果比较器没有为相等字符串返回0,它将混淆排序算法。