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

Joh*_*ohn 37 javascript sorting

我想创建一个(非匿名)函数,按键按字母顺序对对象数组进行排序name.我只编写直接的JavaScript代码,所以框架至少对我没用.

var people = [
    {'name': 'a75', 'item1': false, 'item2': false},
    {'name': 'z32', 'item1': true,  'item2': false},
    {'name': 'e77', 'item1': false, 'item2': false}
];
Run Code Online (Sandbox Code Playgroud)

Dav*_*ner 111

这个怎么样?

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');
Run Code Online (Sandbox Code Playgroud)

这允许您指定要对数组进行排序的键,以便您不限于硬编码的名称排序.它将对所有共享属性的对象数组进行排序,这些属性用作键.我相信那就是你要找的东西?

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

  • 该算法使stacksort混乱。请修正 (2认同)
  • 来自 StackSort 的您好!很好的答案,完成了工作。 (2认同)

pim*_*vdb 26

您可以使用以下函数对数组([...])进行排序.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
});
Run Code Online (Sandbox Code Playgroud)


Geu*_*uis 8

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

试试这个:

people.sort(function(a,b){ 
    var x = a.name < b.name? -1:1; 
    return x; 
});
Run Code Online (Sandbox Code Playgroud)

  • 如果他们是平等的怎么办? (4认同)
  • +1我用它来对价格进行排序,我只是将'<'换成'>',我将价格从最低到最高排序.谢谢! (2认同)

Rya*_*awa 5

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

people.sort((a, b) => a.toLocaleUpperCase() < b.toLocaleUpperCase() ? -1 : 1);
Run Code Online (Sandbox Code Playgroud)