w-component-vue
Version:
A simple component for vue(vue2).
164 lines (123 loc) • 10.2 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>binarySearch.mjs - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
<script src="scripts/nav.js" defer></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav >
<h2><a href="index.html">Home</a></h2><h3>Modules</h3><ul><li><a href="module-WAggridVueDyn.html">WAggridVueDyn</a></li><li><a href="module-WBadge.html">WBadge</a></li><li><a href="module-WButtonChip.html">WButtonChip</a></li><li><a href="module-WButtonCircle.html">WButtonCircle</a></li><li><a href="module-WCheckbox.html">WCheckbox</a></li><li><a href="module-WCkeditorVueDyn.html">WCkeditorVueDyn</a></li><li><a href="module-WColorPickAlpha.html">WColorPickAlpha</a></li><li><a href="module-WColorPickHexagon.html">WColorPickHexagon</a></li><li><a href="module-WColorPickHexagonGray.html">WColorPickHexagonGray</a></li><li><a href="module-WColorPickHsv.html">WColorPickHsv</a></li><li><a href="module-WColorPickHue.html">WColorPickHue</a></li><li><a href="module-WColorPickStripe.html">WColorPickStripe</a></li><li><a href="module-WColorSelect.html">WColorSelect</a></li><li><a href="module-WColorSelectInput.html">WColorSelectInput</a></li><li><a href="module-WColorSelectPanel.html">WColorSelectPanel</a></li><li><a href="module-WColorSelectPanelBlock.html">WColorSelectPanelBlock</a></li><li><a href="module-WColorSelectPanelHsva.html">WColorSelectPanelHsva</a></li><li><a href="module-WConfirm.html">WConfirm</a></li><li><a href="module-WDialog.html">WDialog</a></li><li><a href="module-WDrawer.html">WDrawer</a></li><li><a href="module-WDropfiles.html">WDropfiles</a></li><li><a href="module-WDynamicList.html">WDynamicList</a></li><li><a href="module-WEchartsVueDyn.html">WEchartsVueDyn</a></li><li><a href="module-WExplorer.html">WExplorer</a></li><li><a href="module-WGroupBaggage.html">WGroupBaggage</a></li><li><a href="module-WGroupChipCheck.html">WGroupChipCheck</a></li><li><a href="module-WGroupChipRadio.html">WGroupChipRadio</a></li><li><a href="module-WGroupDragdrop.html">WGroupDragdrop</a></li><li><a href="module-WGroupIconCheck.html">WGroupIconCheck</a></li><li><a href="module-WGroupIconRadio.html">WGroupIconRadio</a></li><li><a href="module-WGroupTags.html">WGroupTags</a></li><li><a href="module-WHighchartsBitmapDyn.html">WHighchartsBitmapDyn</a></li><li><a href="module-WHighchartsVueDyn.html">WHighchartsVueDyn</a></li><li><a href="module-WHighstockVueDyn.html">WHighstockVueDyn</a></li><li><a href="module-WIcon.html">WIcon</a></li><li><a href="module-WIconLoading.html">WIconLoading</a></li><li><a href="module-WImageCascadingDyn.html">WImageCascadingDyn</a></li><li><a href="module-WImageLazy.html">WImageLazy</a></li><li><a href="module-WImageViewerDyn.html">WImageViewerDyn</a></li><li><a href="module-WInputCheckbox.html">WInputCheckbox</a></li><li><a href="module-WInputRadio.html">WInputRadio</a></li><li><a href="module-WJsonView.html">WJsonView</a></li><li><a href="module-WLeafletVueDyn.html">WLeafletVueDyn</a></li><li><a href="module-WLevelGrade.html">WLevelGrade</a></li><li><a href="module-WListCheck.html">WListCheck</a></li><li><a href="module-WListExpand.html">WListExpand</a></li><li><a href="module-WListExpandItem.html">WListExpandItem</a></li><li><a href="module-WListHorizontal.html">WListHorizontal</a></li><li><a href="module-WListItem.html">WListItem</a></li><li><a href="module-WListRadio.html">WListRadio</a></li><li><a href="module-WListVertical.html">WListVertical</a></li><li><a href="module-WPanelAvatar.html">WPanelAvatar</a></li><li><a href="module-WPanelBulge.html">WPanelBulge</a></li><li><a href="module-WPanelDivideHorizontal.html">WPanelDivideHorizontal</a></li><li><a href="module-WPanelDivideVertical.html">WPanelDivideVertical</a></li><li><a href="module-WPanelLabelItem.html">WPanelLabelItem</a></li><li><a href="module-WPanelScale.html">WPanelScale</a></li><li><a href="module-WPanelScrolly.html">WPanelScrolly</a></li><li><a href="module-WPanelScrollyCore.html">WPanelScrollyCore</a></li><li><a href="module-WPanelStripe.html">WPanelStripe</a></li><li><a href="module-WPopup.html">WPopup</a></li><li><a href="module-WPopupEditText.html">WPopupEditText</a></li><li><a href="module-WProgressBar.html">WProgressBar</a></li><li><a href="module-WProgressCircle.html">WProgressCircle</a></li><li><a href="module-WQuillVueDyn.html">WQuillVueDyn</a></li><li><a href="module-WSegmentsVertical.html">WSegmentsVertical</a></li><li><a href="module-WShellBottomLine.html">WShellBottomLine</a></li><li><a href="module-WShellEllipse.html">WShellEllipse</a></li><li><a href="module-WSlider.html">WSlider</a></li><li><a href="module-WSwitch.html">WSwitch</a></li><li><a href="module-WTableDyn.html">WTableDyn</a></li><li><a href="module-WText.html">WText</a></li><li><a href="module-WTextCore.html">WTextCore</a></li><li><a href="module-WTextInt.html">WTextInt</a></li><li><a href="module-WTextIntCore.html">WTextIntCore</a></li><li><a href="module-WTextSelect.html">WTextSelect</a></li><li><a href="module-WTextSuggest.html">WTextSuggest</a></li><li><a href="module-WTextSuggestCore.html">WTextSuggestCore</a></li><li><a href="module-WTextarea.html">WTextarea</a></li><li><a href="module-WTextareaCore.html">WTextareaCore</a></li><li><a href="module-WThreejsVueDyn.html">WThreejsVueDyn</a></li><li><a href="module-WTimeday.html">WTimeday</a></li><li><a href="module-WTimedayCore.html">WTimedayCore</a></li><li><a href="module-WTimedayCoreRe.html">WTimedayCoreRe</a></li><li><a href="module-WTimedayRange.html">WTimedayRange</a></li><li><a href="module-WTimedayRangeCore.html">WTimedayRangeCore</a></li><li><a href="module-WTimeminute.html">WTimeminute</a></li><li><a href="module-WTimeminuteCore.html">WTimeminuteCore</a></li><li><a href="module-WTimeminuteRange.html">WTimeminuteRange</a></li><li><a href="module-WTimeminuteRangeCore.html">WTimeminuteRangeCore</a></li><li><a href="module-WTinymceVueDyn.html">WTinymceVueDyn</a></li><li><a href="module-WTooltip.html">WTooltip</a></li><li><a href="module-WTree.html">WTree</a></li><li><a href="module-WTreeIconCheckbox.html">WTreeIconCheckbox</a></li><li><a href="module-WTreeIconToggle.html">WTreeIconToggle</a></li><li><a href="module-WVditorDyn.html">WVditorDyn</a></li></ul><h3>Global</h3><ul><li><a href="global.html#binarySearch">binarySearch</a></li><li><a href="global.html#convertColor">convertColor</a></li></ul>
</nav>
<div id="main">
<h1 class="page-title">binarySearch.mjs</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>import size from 'lodash-es/size.js'
import filter from 'lodash-es/filter.js'
import maxBy from 'lodash-es/maxBy.js'
/**
* 二元搜索法(Binary Search),通過fGetValue(index)取值,求最靠近0但小於0的值,並回傳值與所在的index與所查得的數據items[index]
*
* @param {Array} items 輸入欲搜尋陣列
* @param {Function} fGetValue 輸入取值函數,傳入index
* @returns {Object} 回傳物件index,最靠近0但小於0的值、所在的index與所查得的數據items[index]
*/
function binarySearch(items, fGetValue) {
let n = size(items)
let iStart = 0
let vStart = fGetValue(iStart)
let iEnd = n - 1
let vEnd = fGetValue(iEnd)
let run = true
let index = null
while (run) {
let iMiddle = Math.floor((iEnd + iStart) / 2)
let vMiddle = fGetValue(iMiddle)
//console.log(`iStart=${iStart}, vStart=${vStart}, iMiddle=${iMiddle}, vMiddle=${vMiddle}, iEnd=${iEnd}, vEnd=${vEnd}`)
//check
if (vStart < 0 && vMiddle < 0 && vEnd < 0) {
index = null
run = false
break
}
else if (vStart > 0 && vMiddle > 0 && vEnd > 0) {
index = null
run = false
break
}
else if (vStart === 0) {
index = iStart
run = false
break
}
else if (vMiddle === 0) {
index = iMiddle
run = false
break
}
else if (vEnd === 0) {
index = iEnd
run = false
break
}
else if (iMiddle === iStart || iMiddle === iEnd) {
let rs = [{
i: iStart,
v: vStart,
},
{
i: iMiddle,
v: vMiddle,
},
{
i: iEnd,
v: vEnd,
}]
rs = filter(rs, (v) => {
return v.v <= 0
})
let r = maxBy(rs, 'v')
index = r.i
run = false
break
}
//update
if (vStart * vMiddle > 0) {
iStart = iMiddle
vStart = vMiddle
}
else {
iEnd = iMiddle
vEnd = vMiddle
}
}
return index
}
export default binarySearch
</code></pre>
</article>
</section>
</div>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Tue Aug 12 2025 20:19:43 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
</footer>
<script>prettyPrint();</script>
<script src="scripts/polyfill.js"></script>
<script src="scripts/linenumber.js"></script>
</body>
</html>