在数组中找到最接近的数字

时间:2018-06-25 10:39:02

标签: javascript jquery

我有一个排序的数字列表。我想在数组中搜索一个数字(将其称为searchVal)。因此,如果数字在数组中,则下面的代码行可以正常工作。

var sPos = $.inArray(searchVal, MyArray);

但是,如果它不在MyArray中,我想选择下一个最大的数字,即

我正在下面的列表中搜索8,我希望它返回10。

4, 5, 6, 10, 11

我是javascript新手,想知道实现此目标的最佳方法是什么?我已经看到可以使用过滤器,其中返回的任何数字> =到8,然后从此过滤的列表中获取最小值。还是我应该使用reduce函数的情况?

4 个答案:

答案 0 :(得分:7)

您可以在已排序的数组上使用Array.find()

  

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="e.aniketpradhan.streamaudio"> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 方法返回满足提供的测试功能的数组中 first 元素的 value 。否则,返回let text = function() { this.main = function(){ return {a:1}; } this.toArr = function(){ return [1,2,3]; } }; let t = new text(); console.log( t.main() ); // call a function 'main' in text; console.log(t.toArr()); // call a function 'toArr' in text;

find()

答案 1 :(得分:2)

由于数组已排序,因此可以使用

var num = MyArray.find(x => x > 8)

答案 2 :(得分:0)

对于未排序的数据,您可以获取某项的绝对增量,并检查最后一项的增量,然后返回增量较小的那一项。

c1 = [70.38017162671083, 573.9210230366474]
c2 = [62.14926043346433, 573.9210230601221]
c3 = [62.170859502652874, 566.273256963365]
c4 = [70.41870117287603, 566.2827951694268]

a1 = 0.7162475014121918
a2 = 3.076344266497204
a3 = 4.964159781307695
a4 = 5.859686474799228

a = Math.sin(a1) +Math.sin(a2)
b =-Math.cos(a1) -Math.cos(a2)
c = Math.sin(a3) +Math.sin(a4)
d =-Math.cos(a3) -Math.cos(a4)

e = Math.sin(a1)*c1[0] + Math.sin(a2)*c2[0] - Math.cos(a1)*c1[1] - Math.cos(a2)*c2[1]
f = Math.sin(a3)*c3[0] + Math.sin(a4)*c4[0] - Math.cos(a3)*c3[1] - Math.cos(a4)*c4[1]

x = (d*e - b*f) / (a*d - b*c)
y = (a*f - c*e) / (a*d - b*c)

答案 3 :(得分:-2)

您好,您可以使用地图功能确定到8的距离。

var array = [4, 5, 6, 10, 11];
var distanceArray = array.map(function(element){
var distance = 8-element
if(distance < 0){
distance = distance * -1;
}
return distance;
})

然后您得到了[4,3,2,2,3]。使用Math.min

var minimum = Math.min(...distanceArray);

现在您的最低数量为2。现在找到了职位

var position = distanceArray.indexOf(minimum);

现在您可以看到最近的电话号码

var nearest = array[position];

认识你6 ....