用最精煉的代碼實(shí)現(xiàn)數(shù)組非零非負(fù)最小值 index
// 例如:[10,21,0,-7,35,7,9,23,18] 輸出 5, 7 最小
function getIndex(arr){
let index=null;
...
return index;
}
我選擇用reduce實(shí)現(xiàn)
1、首先利用了reduce的第二個(gè)可選參數(shù)推盛,作為第一次調(diào)用回調(diào)函數(shù)時(shí)傳給pre的值纺荧,我選擇了一個(gè)json铆帽,來存儲(chǔ)最小的索引值和最小值{i:0,val:Infinity} 之所以val用了Infinity是不確定最小值能有多大。
2蛇更、接下來就簡單了,規(guī)則是大于等于0的最小值,三母來判斷大于0且小于當(dāng)前json的val知押,如果符合條件賦值操作,如果不符合返回上次pre鹃骂。
[1,2,3,4,5,6,9,-1].reduce((pre,cur,index)=>{
return cur>0&&cur<pre['val']?{i:index,val:cur}:pre
},{i:0,val:Infinity})
接下來按照題目封裝成函數(shù)
function getIndex(arr){
return arr.reduce((pre,cur,index)=>{
return cur>0&&cur<pre["val"]?{val:cur, i:index}:pre;
},{val:Infinity,i:0})
}
console.log(getIndex([22,31,41,53,6,0,-2,4,5,1,23]))
image.png