2017-07-26 14 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の要素は、最初のインデックスを返します(存在しない場合)正の値が最も小さいオブジェクト。 ソート配列は必要ありません。私は、値が0またはゼロに近いが、負ではない最も良い一致のインデックスを取得したいだけです。

+1

'Array.find'を使用します:https://developer.mozilla.org/it/docs/Web/JavaScript/参照/グローバル_オブ​​ジェクト/配列/検索。 '.find'は、無名関数に与えられた基準に一致するオブジェクトの**最初のオカレンス**を返します。 findが未定義の場合、0の要素は見つかりません。したがって、2番目の検索を実行します。これは、並べ替えが一切不要な場合に再び検索されます。ただし、** **に最も近い**を取得する必要がある場合は、フィルターと並べ替えのいずれかを使用する必要があります。 – 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

たぶん別のfind @Xufox – baao

+0

おっと、私は 'find'を意味しました。 'sort'の直後にチェーンすることができます。 – Xufox

関連する問題