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