下面是我的对象数组的一个示例,我应该按名称对它们进行排序。js正常排序排序如下图,不过我的目标是按数值排序,例如:“1 ex, 2 ex, 3 ex, 4 ex, 11 ex ..”。有人可以帮助我如何实现这一目标吗?
[{id: 588, name: "1 ex"}
{id: 592, name: "11 ex"}
{id: 607, name: "2 ex"}
{id: 580, name: "3 ex"}
{id: 596, name: "4 ex"}]
下面是我的对象数组的一个示例,我应该按名称对它们进行排序。js正常排序排序如下图,不过我的目标是按数值排序,例如:“1 ex, 2 ex, 3 ex, 4 ex, 11 ex ..”。有人可以帮助我如何实现这一目标吗?
[{id: 588, name: "1 ex"}
{id: 592, name: "11 ex"}
{id: 607, name: "2 ex"}
{id: 580, name: "3 ex"}
{id: 596, name: "4 ex"}]
您必须在比较函数中包含 parse 函数,如下所示:
var compare = function(a, b) {
return parseInt(a.name) - parseInt(b.name);
}
console.log(x.sort(compare));
拆分并将数字部分转换为整数,parseInt()
然后您可以使用这些值对记录进行排序:
var arr = [{id: 588, name: "1 ex"},
{id: 592, name: "11 ex"},
{id: 607, name: "2 ex"},
{id: 580, name: "3 ex"},
{id: 596, name: "4 ex"}];
arr.sort(function (a, b) {
var aNum = parseInt(a.name);
var bNum = parseInt(b.name);
return aNum - bNum;
});
console.log(arr);
@user2004082,您也可以尝试以下代码以获得您想要的相同。
var arr = [{id: 588, name: "1 ex"},
{id: 592, name: "11 ex"},
{id: 607, name: "2 ex"},
{id: 580, name: "3 ex"},
{id: 596, name: "4 ex"}];
var map = {}
for(var item of arr) {
map[item["name"]] = item;
}
var arr = arr.map(function(item){return item["name"]}).sort(function(a, b){
var a = parseInt(a.split(' ')[0]);
var b = parseInt(b.split(' ')[0]);
return a-b;
}).map(function(name){
return map[name];
})
console.log(arr);
“ 输出
[ { id: 588, name: '1 ex' },
{ id: 607, name: '2 ex' },
{ id: 580, name: '3 ex' },
{ id: 596, name: '4 ex' },
{ id: 592, name: '11 ex' } ]
arr = [{id: 588, name: "1 ex"},
{id: 592, name: "11 ex"},
{id: 607, name: "2 ex"},
{id: 580, name: "3 ex"},
{id: 596, name: "4 ex"}]
result = arr.sort(function(a, b) { return parseInt(a.name) > parseInt(b.name) })
console.log(result)
尝试关注
let arr = [{id: 588, name: "1 ex"},
{id: 592, name: "11 ex"},
{id: 607, name: "2 ex"},
{id: 580, name: "3 ex"},
{id: 596, name: "4 ex"}];
arr.sort((a,b) => a.name.split(" ")[0] - b.name.split(" ")[0]);
console.log(arr);