fai*_*gir 8 javascript arrays sorting
我知道我们可以定义json对象数组的自定义排序函数.但是,如果订单既不是,那怎么办desc nor asc?例如,假设我的数组看起来像:
[ {
name: 'u'
},
{
name: 'n'
},
{
name: 'a'
},
{
name: 'n',
}
]
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:
[ {
name: 'n'
},
{
name: 'n'
},
{
name: 'a'
},
{
name: 'u',
}
]
Run Code Online (Sandbox Code Playgroud)
所有以名称开头的名称首先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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是返回对象的顺序是错误的.这里出了什么问题?
nra*_*itz 18
如果您有任意排序顺序,一个选项是将订单分配给数组,然后使用indexOf:
var sortOrder = ['n', 'a', 'u'];
var myArray = [{
name: 'u'
},
{
name: 'n'
},
{
name: 'a'
},
{
name: 'n'
}
];
myArray.sort(function(a, b) {
return sortOrder.indexOf(a.name) - sortOrder.indexOf(b.name);
});
console.log(myArray);Run Code Online (Sandbox Code Playgroud)
如果在任一数组中都有许多值,那么首先创建一个value-index映射然后再使用它可能是值得的sortOrder[a.name].
| 归档时间: |
|
| 查看次数: |
3509 次 |
| 最近记录: |