input輸入時判定陣列值

我想在一個input透過陣列中使用二分搜尋,找到最相近的值,

並在input變換成最相近的數值,該如何實現呢?

假設陣列是 [ 4, 7, 8 ] 在input中輸入5 他會自動變成4.

求助大神!


//二分搜尋法
Array.prototype.binary_search = function(low, high, khey) {
if (low > high)
return -1;
var mid = parseInt((high + low) / 2);
if (this[mid] > khey)
return this.binary_search(low, mid - 1, khey);
if (this[mid] < khey)
return this.binary_search(mid + 1, high, khey);
return mid;
};


慕田峪7331174
浏览 513回答 1
1回答

手掌心

用迭代比较简单,没使用递归。Array.prototype.binary_search_clo&nbsp;=&nbsp;function(khey)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;low&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;high&nbsp;=&nbsp;this.length&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;mid&nbsp;=&nbsp;parseInt((high&nbsp;+&nbsp;low&nbsp;+&nbsp;1)&nbsp;/&nbsp;2);&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(this[mid]&nbsp;!=&nbsp;khey&nbsp;&&&nbsp;low&nbsp;<&nbsp;high){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this[mid]&nbsp;>&nbsp;khey){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;high&nbsp;=&nbsp;mid&nbsp;-&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(this[mid]&nbsp;<&nbsp;khey){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low&nbsp;=&nbsp;mid&nbsp;+&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid&nbsp;=&nbsp;parseInt((high&nbsp;+&nbsp;low)&nbsp;/&nbsp;2); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(mid&nbsp;>&nbsp;0&nbsp;&&&nbsp;Math.abs(parseInt(this[mid]&nbsp;-&nbsp;khey))&nbsp;>&nbsp;Math.abs(parseInt(this[mid-1]&nbsp;-&nbsp;khey))){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid&nbsp;=&nbsp;mid&nbsp;-1; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;mid; };找到最后了, 要与旁边比较一下,哪个更接近。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript