Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于对对象数组进行排序的简单函数_Javascript_Sorting - Fatal编程技术网

Javascript 用于对对象数组进行排序的简单函数

Javascript 用于对对象数组进行排序的简单函数,javascript,sorting,Javascript,Sorting,我想创建一个(非匿名)函数,该函数按键名称按字母顺序对对象数组进行排序。我只直接编写JavaScript,所以框架对我一点帮助都没有 var people = [ {'name': 'a75', 'item1': false, 'item2': false}, {'name': 'z32', 'item1': true, 'item2': false}, {'name': 'e77', 'item1': false, 'item2': false} ]; 这本身不是一

我想创建一个(非匿名)函数,该函数按键
名称
按字母顺序对对象数组进行排序。我只直接编写JavaScript,所以框架对我一点帮助都没有

var people = [
    {'name': 'a75', 'item1': false, 'item2': false},
    {'name': 'z32', 'item1': true,  'item2': false},
    {'name': 'e77', 'item1': false, 'item2': false}
];

这本身不是一个JSON问题。这是一个javascript数组问题

试试这个:

people.sort(function(a,b){ 
    var x = a.name < b.name? -1:1; 
    return x; 
});
people.sort(函数(a,b){
var x=a.name
您可以使用
.sort
功能对数组(
[…]
)进行排序

var people = [
    {'name': 'a75', 'item1': false, 'item2': false},
    {'name': 'z32', 'item1': true,  'item2': false},
    {'name': 'e77', 'item1': false, 'item2': false},
];

var sorted = people.sort(function IHaveAName(a, b) { // non-anonymous as you ordered...
    return b.name < a.name ?  1 // if b should come earlier, push a to end
         : b.name > a.name ? -1 // if b should come later, push a to begin
         : 0;                   // a and b are equal
});
for(amount in items){
if(item.hasOwnProperty(amount)){

i.sort((a, b) => a.amount - b.amount);
}
}
var-people=[
{'name':'a75','item1':false,'item2':false},
{'name':'z32','item1':true,'item2':false},
{'name':'e77','item1':false,'item2':false},
];
var sorted=people.sort(函数IHaveAName(a,b){//按您的顺序非匿名。。。
返回b.namea.name?-1//如果b稍后出现,请按a开始
:0;//a和b相等
});
这个怎么样

var people = [
{
    name: 'a75',
    item1: false,
    item2: false
},
{
    name: 'z32',
    item1: true,
    item2: false
},
{
    name: 'e77',
    item1: false,
    item2: false
}];

function sort_by_key(array, key)
{
 return array.sort(function(a, b)
 {
  var x = a[key]; var y = b[key];
  return ((x < y) ? -1 : ((x > y) ? 1 : 0));
 });
}

people = sort_by_key(people, 'name');
var-people=[
{
名称:“a75”,
第1项:错误,
第2项:错误
},
{
名称:“z32”,
第1项:正确,
第2项:错误
},
{
名称:“e77”,
第1项:错误,
第2项:错误
}];
函数按键排序(数组,键)
{
返回array.sort(函数(a,b)
{
变量x=a[key];变量y=b[key];
回报率((xy)?1:0);
});
}
people=sort_by_key(people,'name');
这允许您指定要对数组进行排序的键,以便不限于硬编码名称排序。它将用于对所有共享用作其键的属性的对象数组进行排序。我相信这就是你想要的

下面是一个JSFIDLE:


类似于这一点的东西可能(或者我们过去常说的,这应该行得通)

var数据=[1,2,5,3,1]; sort(函数(a,b){返回a-b})


有了一个小比较器并使用sort,我们就可以做到这一点

我用ECMA6解决类似的排序问题

var库=[
{名称:'Steve',课程:'WAP',课程ID:'cs452'},
{名称:'Rakesh',课程:'WAA',课程ID:'cs545'},
{名称:'Asad',课程:'SWE',课程ID:'cs542'},
];
按名称排序的常量=library.sort((a,b)=>a.name>b.name);
for(让k按名称排序){
日志(按名称[k]排序);
}
var库=[
{名称:'Steve',课程:'WAP',课程ID:'cs452'},
{名称:'Rakesh',课程:'WAA',课程ID:'cs545'},
{名称:'Asad',课程:'SWE',课程ID:'cs542'},
];
按名称排序的常量=library.sort((a,b)=>a.name>b.name);
for(让k按名称排序){
日志(按名称[k]排序);

}
我使用lambda修改了@Geuis的答案,并首先将其转换为大写:

people.sort((a, b) => a.toLocaleUpperCase() < b.toLocaleUpperCase() ? -1 : 1);
people.sort((a,b)=>a.tolocaluppercase()
那么举个例子,如果我们有

var arr = [ {id: 0, balls: {red: 8,  blue: 10}},
            {id: 2, balls: {red: 6 , blue: 11}},
            {id: 1, balls: {red: 4 , blue: 15}} ]


这就是我如何简单地从前面的示例中排序:

如果我的数组是

0: {id: 14, auctionID: 76, userID: 1, amount: 39}
1: {id: 1086, auctionID: 76, userID: 1, amount: 55}
2: {id: 1087, auctionID: 76, userID: 1, amount: 55}
我以为只要调用
items.sort()
就可以对其进行排序,但有两个问题: 1.他正在整理这些字符串 2.把它们分类是第一个关键

以下是我修改排序函数的方式:

var people = [
    {'name': 'a75', 'item1': false, 'item2': false},
    {'name': 'z32', 'item1': true,  'item2': false},
    {'name': 'e77', 'item1': false, 'item2': false},
];

var sorted = people.sort(function IHaveAName(a, b) { // non-anonymous as you ordered...
    return b.name < a.name ?  1 // if b should come earlier, push a to end
         : b.name > a.name ? -1 // if b should come later, push a to begin
         : 0;                   // a and b are equal
});
for(amount in items){
if(item.hasOwnProperty(amount)){

i.sort((a, b) => a.amount - b.amount);
}
}
var库=[
{名称:'Steve',课程:'WAP',课程ID:'cs452'},
{名称:'Rakesh',课程:'WAA',课程ID:'cs545'},
{名称:'Asad',课程:'SWE',课程ID:'cs542'},
];
按名称排序的常量=library.sort((a,b)=>a.name>b.name);
for(让k按名称排序){
日志(按名称[k]排序);


}
到目前为止您有什么?为什么要显式使用非匿名函数?非匿名函数排序(json_对象,key_to_sort_by){}添加了引号,已经好几天没有编码了!我只想弄清楚JSON和JavaScript是如何设置键并排序的。图如果不是基于整数的,我可能会使用排序方法?匿名函数示例:window.onload=function(){/*stuff();*/}上面列出的不是JSON,而是一个普通的JavaScript对象。JSON是JavaScript对象的字符串编码版本。虽然这是一个烦人的函数,但我正在尝试进行函数排序示例(对象名称,键到排序依据){}@John:这是一个命名函数表达式:)您想要的不是太难,试试看。排序之后我应该控制台什么,sorted or People我正在尝试函数sort_示例(object_name,key_to_sort_by){}+1我用它对价格进行排序,我只是把括号倒过来,我得到了从最低到最高的价格排序。非常感谢。由于比较返回
1
的相同元素,这可能会造成严重后果。根据排序函数用户的不同,任何情况都可能发生。
parseInt('a75')
NaN
,所以我想这不会真正起作用;当我们处理字符串值时,我不认为这是合适的解决方案,因为字符串上的parseInt可能会给出意外的值,但是如果您比较的字符串具有数值或十进制值,那么可以按2个键排序吗?例如“姓”、“名”?(类似于mysql的orderby字段)。谢谢@DavidBrainer Banker——我真的很喜欢这个答案中的解决方案——如果我想按多个键排序呢?这是可能的解决方案或更好地处理另一种方式?对于排序的降序,应该做什么?这个算法混乱了stacksort。请转达StackSort的问候!回答很好,完成了任务。很有趣,但对浏览器共享/兼容性来说是主观的。如果它能在IE11中工作,那么2017年的兼容性是公平的,否则如果它需要IE12(“Edge”),则必须等到2020年左右。看起来没有那么口头…虽然当我最初发布这篇文章时,我要求提供一个可以调用的非匿名函数。在回答问题时,在代码中加入一些解释性文本总是很好的。比较函数返回布尔值,它应该返回一个数
0: {id: 14, auctionID: 76, userID: 1, amount: 39}
1: {id: 1086, auctionID: 76, userID: 1, amount: 55}
2: {id: 1087, auctionID: 76, userID: 1, amount: 55}
for(amount in items){
if(item.hasOwnProperty(amount)){

i.sort((a, b) => a.amount - b.amount);
}
}