2017-07-26 131 views
-4

我有一個關於查找數組中的對象的問題。我有一個對象數組是這樣的:返回最接近的匹配對象

var myArray = [{ index: 20, value: -1800000 }, { index: 21, value: -1200000 }, { index: 22, value: -10000 }, { index: 23, value: -1000 }, { index: 24, value: 0 }, { index: 25, value: 1000 }, { index: 26, value: 10000 }, { index: 27, value: 1800000 }]; 

現在的問題是,如何返回元素的索引,其中,值== 0或如果與價值== 0元素不存在返回的第一個索引具有最小正值的對象。 我不需要一個排序數組,我只想得到一個最佳匹配索引,其值等於零或接近於零但不爲負。

+1

使用'Array.find':https://developer.mozilla.org/it/docs/Web/JavaScript/參考/ Global_Objects/Array/find。 '.find'將返回匹配提供給匿名函數的條件的對象的**第一次出現**。如果find返回undefined,則不會找到包含0的元素,因此您執行第二次搜索,如果不需要任何種類的排序,則可能再次找到該搜索。但是,如果您需要獲得最接近0 **的**,則可能需要使用過濾或排序方式。 – briosheje

+0

請顯示您的嘗試。 – Xufox

回答

2

首先使用發現,如果沒有找到的東西,循環數組排序,並返回第一個正匹配:

var myArray = [{ index: 20, value: -1800000 }, { index: 21, value: -1200000 }, { index: 22, value: -10000 }, { index: 23, value: -1000 }, { index: 24, value: 6 }, { index: 25, value: 1000 }, { index: 26, value: 10000 }, { index: 27, value: 1800000 }]; 
 

 
function findClosestToZero(arr) { 
 
    let r = arr.find(v => v.value === 0); 
 
    if (r) return r.index; 
 
    arr.sort((a,b) => a.value > b.value); 
 
    for (let o of arr) { 
 
     if (o.value > 0) return o.index; 
 
    } 
 
} 
 

 
console.log(findClosestToZero(myArray));

如果陣列由值已經排序,

let r = arr.find(v => v.value >= 0); 

也會這樣做。 (或者你總是先排序數組,但是如果你應該這樣做取決於數據)

+0

爲什麼不在'sort'之後使用'filter'? – Xufox

+0

也許另一個發現@ Xufox – baao

+0

哎呀,我的意思是'發現'。你可以在'sort'之後直接鏈接它。 – Xufox