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

IT技术 javascript sorting
2021-01-31 10:11:03

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

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

这个怎么样?

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

这允许您指定要用来对数组进行排序的键,这样您就不受限于硬编码的名称排序。它将对所有共享用作它们的键的属性的任何对象数组进行排序。我相信这就是你要找的?

这是一个 jsFiddle:http : //jsfiddle.net/6Dgbu/

你好,来自 StackSort!很好的答案,完成了工作。
2021-03-24 10:11:03
对于排序的降序,应该怎么做?
2021-03-30 10:11:03
这个算法搞乱了堆栈排序。请修复
2021-04-02 10:11:03
@DavidBrainer-Banker - 我真的很喜欢这个答案中的解决方案 - 如果我想按多个键排序怎么办?使用此解决方案或以其他方式更好地处理是否可行?
2021-04-07 10:11:03
是否可以按 2 个键排序?例如。'姓氏','姓氏'?(类似于 mysql 的 ORDER BY 字段)。谢谢!
2021-04-12 10:11:03

您可以使用以下函数数组( [...]) 进行排序.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
});
所以排序后我应该安慰什么,排序或人
2021-03-15 10:11:03
谢谢,虽然这是一个令人讨厌的功能,但我正在尝试执行 function sort_example(object_name,key_to_sort_by) {}
2021-03-26 10:11:03
@John:现在是命名函数表达式:) 你想要的不是太难,试试看。
2021-04-05 10:11:03

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

试试这个:

people.sort(function(a,b){ 
    var x = a.name < b.name? -1:1; 
    return x; 
});
我正在尝试执行函数 sort_example(object_name,key_to_sort_by) {}
2021-03-15 10:11:03
由于比较相同的元素返回,这可能会很糟糕1根据排序功能用户的不同,任何事情都可能发生。
2021-04-06 10:11:03
+1我用它来对价格进行排序,我只是将括号“<”倒置为“>”,然后我将价格从最低到最高排序。谢谢!
2021-04-08 10:11:03

我使用 ECMA 6 解决类似排序问题

var library = [
        {name: 'Steve', course:'WAP', courseID: 'cs452'}, 
        {name: 'Rakesh', course:'WAA', courseID: 'cs545'},
        {name: 'Asad', course:'SWE', courseID: 'cs542'},
];

const sorted_by_name = library.sort( (a,b) => a.name > b.name );

for(let k in sorted_by_name){
    console.log(sorted_by_name[k]);
}

你确定这是按照标准工作的吗?<on strings 仅返回trueor falseon Node v14.17.0,而不是所需的 -1, 0, 1。
2021-04-10 10:11:03
有趣但主观的浏览器共享/兼容性。如果它可以在 IE11 中工作,那么 2017 的兼容性是公平的,否则如果它需要 IE12(“Edge”),则必须等到 2020 年左右。看起来稍微不那么口头......虽然当我最初发布这个时,我要求一个非匿名的我可以调用的函数。
2021-04-12 10:11:03

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

people.sort((a, b) => a.toLocaleUpperCase() < b.toLocaleUpperCase() ? -1 : 1);