Javascript 按预定义数字对数组排序

Javascript 按预定义数字对数组排序,javascript,jquery,arrays,sorting,Javascript,Jquery,Arrays,Sorting,假设我有多维数组 var arr = [{ "id": "1", "firstname": "SUSAN", "dezibel": "91" }, { "id": "2", "firstname": "JOHNNY", "dezibel": "74" }, { "id": "3", "firstname": "ANDREA", "dezibel": "67" }]; 如何按“dezibel”排序,但不按升序或降序排序,而是

假设我有多维数组

var arr = [{
    "id": "1",
    "firstname": "SUSAN",
    "dezibel": "91"
}, {
    "id": "2",
    "firstname": "JOHNNY",
    "dezibel": "74"
}, {
    "id": "3",
    "firstname": "ANDREA",
    "dezibel": "67"
}];
如何按“dezibel”排序,但不按升序或降序排序,而是按最接近给定数字排序?比如说,

var num = 78;

所以目标值是78。最后的排序必须是:74、67、91。

编写一个排序函数,计算到数字的距离:

arr.sort(function(a, b){
    return Math.abs(num-a) - Math.abs(num-b);
});

使用此选项对数组中的
dezibel
属性进行排序。它将计算它们之间的距离和
num
。然后,它将选择两个距离中较小的一个,并以这种方式继续对整个阵列进行排序。

编写一个排序函数,计算到您的数字的距离:

arr.sort(function(a, b){
    return Math.abs(num-a) - Math.abs(num-b);
});

使用此选项对数组中的
dezibel
属性进行排序。它将计算它们之间的距离和
num
。然后,它将选择两个距离中较小的一个,并以这种方式继续对整个数组进行排序。

您需要使用一个自定义排序函数来比较每个对象的
dezibel
属性与78之间的绝对差

var-arr=[{
“id”:“1”,
“名字”:“苏珊”,
“dezibel”:“91”
}, {
“id”:“2”,
“名字”:“约翰尼”,
“dezibel”:“74”
}, {
“id”:“3”,
“名字”:“安德里亚”,
“dezibel”:“67”
}];
num=78;
arr.sort(
功能(第一,第二){
VarA=Math.abs(num-(+first.dezibel));
VarB=Math.abs(num-(+second.dezibel));
返回a-b;
});

警报(JSON.stringify(arr))
您需要使用一个自定义排序函数来比较每个对象的
dezibel
属性与78的绝对差异

var-arr=[{
“id”:“1”,
“名字”:“苏珊”,
“dezibel”:“91”
}, {
“id”:“2”,
“名字”:“约翰尼”,
“dezibel”:“74”
}, {
“id”:“3”,
“名字”:“安德里亚”,
“dezibel”:“67”
}];
num=78;
arr.sort(
功能(第一,第二){
VarA=Math.abs(num-(+first.dezibel));
VarB=Math.abs(num-(+second.dezibel));
返回a-b;
});

警报(JSON.stringify(arr))只需按绝对差排序即可

var arr=[{“id”:“1”,“firstname”:“SUSAN”,“dezibel”:“91”},{“id”:“2”,“firstname”:“JOHNNY”,“dezibel”:“74”},{“id”:“3”,“firstname”:“ANDREA”,“dezibel”:“67”},
num=78;
arr.sort(函数(a,b){
返回Math.abs(a.dezibel-num)-Math.abs(b.dezibel-num);
});

document.write(''+JSON.stringify(arr,0,4)+'')只需按绝对差排序即可

var arr=[{“id”:“1”,“firstname”:“SUSAN”,“dezibel”:“91”},{“id”:“2”,“firstname”:“JOHNNY”,“dezibel”:“74”},{“id”:“3”,“firstname”:“ANDREA”,“dezibel”:“67”},
num=78;
arr.sort(函数(a,b){
返回Math.abs(a.dezibel-num)-Math.abs(b.dezibel-num);
});
document.write(''+JSON.stringify(arr,0,4)+'')可以选择使用函数。该函数一次获取2个值,并对它们进行比较:

  • 如果第一个值的排序高于第二个值,则函数应返回正数
  • 如果第一个值的排序应低于第二个值,则函数应返回负数
  • 如果值相等,函数应返回
    0
因此,如果您想按升序对dezibel进行排序,您可以这样做

Math.abs(78 - a.dezibel)
但是,您需要按照dezibel与某个数字的距离进行排序。要从
78
dezibel
值中找出差值的大小,请取差值的绝对值:

arr.sort(function(a,b){
    return Math.abs(78 - a.dezibel) - Math.abs(78 - b.dezibel);
});
现在,如果我们想根据每个对象的值进行排序,我们可以取
Math.abs
调用
a
b
的差值:

arr.sort(function(a, b) {
   return num - 1 * a.dezibel + num - 1 * b.dezibel
})
可选地接受一个函数。该函数一次获取2个值,并对它们进行比较:

  • 如果第一个值的排序高于第二个值,则函数应返回正数
  • 如果第一个值的排序应低于第二个值,则函数应返回负数
  • 如果值相等,函数应返回
    0
因此,如果您想按升序对dezibel进行排序,您可以这样做

Math.abs(78 - a.dezibel)
但是,您需要按照dezibel与某个数字的距离进行排序。要从
78
dezibel
值中找出差值的大小,请取差值的绝对值:

arr.sort(function(a,b){
    return Math.abs(78 - a.dezibel) - Math.abs(78 - b.dezibel);
});
现在,如果我们想根据每个对象的值进行排序,我们可以取
Math.abs
调用
a
b
的差值:

arr.sort(function(a, b) {
   return num - 1 * a.dezibel + num - 1 * b.dezibel
})

您可以使用数组排序函数执行以下操作:

num=78
for e in arr
    e.dist=Math.abs(e.dezibel - num)
arr.sort (l,r) =>
    if l.dist > r.dist then 1 else -1

您可以使用数组排序函数执行以下操作:

num=78
for e in arr
    e.dist=Math.abs(e.dezibel - num)
arr.sort (l,r) =>
    if l.dist > r.dist then 1 else -1

我只需要添加一个距离,然后对它进行排序

    arr.sort (l,r) =>
        if Math.abs(l.dezibel - num) > Math.abs(r.dezibel - num) then 1 else -1
删除后的dist

但是放一行也可以


我只需要添加一个距离,然后对它进行排序

    arr.sort (l,r) =>
        if Math.abs(l.dezibel - num) > Math.abs(r.dezibel - num) then 1 else -1
删除后的dist

但是放一行也可以


这将需要访问数组中对象的属性,而不仅仅是数组元素。谢谢这将需要访问数组中对象的属性,而不仅仅是数组元素。谢谢但是dezibel是对数值,也许排序应该尊重它?但是dezibel是对数值,也许排序应该尊重它?谢谢大家的帮助。我会接受这个答案,因为这是最详细的回答。谢谢大家的帮助。我会接受这个答案,因为这是最详细的回答。