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是对数值,也许排序应该尊重它?谢谢大家的帮助。我会接受这个答案,因为这是最详细的回答。谢谢大家的帮助。我会接受这个答案,因为这是最详细的回答。