我知道我们可以定义json对象数组的自定义排序函数.但是,如果订单既不是desc也不是asc.例如,假设我的数组看起来像:
[ { name: 'u' },{ name: 'n' },{ name: 'a' },{ name: 'n',} ]
输出应如下所示:
[ { name: 'n' },{ name: 'u',} ]
所有以n开头的名称首先排序,然后排序.我尝试了以下自定义排序功能:
_sortByName(a,b){ if (a.name === 'n'){ return 1; } else if(b.name === 'n'){ return 1; } else if(a.name < b.name){ return 1; } else if(a.name > b.name){ return -1; } }
但是返回对象的顺序是错误的.这里出了什么问题?
解决方法
如果您有任意排序顺序,一个选项是将订单分配给数组,然后使用indexOf:
var sortOrder = ['n','a','u']; var myArray = [{ name: 'u' },{ name: 'n' } ]; myArray.sort(function(a,b) { return sortOrder.indexOf(a.name) - sortOrder.indexOf(b.name); }); console.log(myArray);
如果在任一数组中有许多值,则首先创建值索引映射然后使用sortOrder [a.name]可能是值得的.