排序

时间:2016-04-05 11:20:58

标签: javascript

我有一个像这样的对象数组:

var myArray = [{name: 'John', sortItem: 'abra'}, {name: 'Doe', sortItem: 'cadabra'}]

一些给定的约束:

  1. 这些项目是动态的 - 无论是" name"和" sortItem"性能;
  2. 有一个很好的理由显示名称,但按另一个字段排序;
  3. 此数组来自服务器,因此必须易于JSON字符串化。
  4. 然后我使用sortBy(myArray, 'sortItem')对其进行排序(sortBy来自lodash)。

    现在我想添加一个默认选项,我想确保它在排序后始终是第一个选项。所以我尝试了一些选择:

    1. var myList = ['a', 'A', 0]; _.sortBy(myList)会产生["A", "a", 0]
    2. var myList = ['a', 'A', '_']; _.sortBy(myList)会产生["A", "_", "a"]
    3. var myList = ['a', 'A', '.']; _.sortBy(myList)会产生[".", "A", "a"]
    4. var myList = ['a', 'A', '']; _.sortBy(myList)会产生["", "A", "a"]
    5. 似乎我现在最好的选择是添加{name: 'Default', sodtItem: ''},但还有另一个字符/值可以确保我的默认项目是第一个吗?

      修改

      问题不在于如何构建排序功能;但相反,哪个角色的价值最低""在Javascript?

      换句话说,如果你列出所有可能的字符(那些通过jsonification的字符)并对它们进行排序 - 那么第一个字符是什么?

1 个答案:

答案 0 :(得分:1)

您可以添加另一个排序字段,它将确定主要顺序,“sortItem”将是您的次要排序。

所以你的排序看起来像是:

_.sortBy(myArray, ['default', 'sortItem'])

你的阵列看起来像:

var myArray = [
    {name: 'John', sortItem: 'abra'}, 
    {name: 'Doe', sortItem: 'cadabra'}, 
    {name: 'This is the default', sortItem: 'zzzzz', default: true}
];