2017-09-21 9 views
1

私は値が100より小さいオブジェクトのインデックスを返す関数を作成しようとしています。現在、私が知っている限り、そのオブジェクトのどれもがその基準を満たしていないことを示す-1を返しますそれはそうです。私はそれが単純なものだと思っています。誰も提案を提供できますか?ありがとうjavascriptでindexOfの値を見つける

var distance = [ 16996.054413094975, 
    102.48330298955042, 
    8930.89370465407, 
    10856.832465874579, 
    6820.160641562082, 
    114.07, 
    8730.587245583654, 
    325.9682182750614, 
    6247.132833741246, 
    6528.189432909801, 
    10856.170817339278, 
    8036.961700844721, 
    98.66650647724741, 
    16265.209545673928, 
    16266.769167269893, 
    715.0404901364141, 
    7121.899289338758 ]; 


var addresses = function(){ 
     for (var i = 0; i <= distance.length; i ++) 
     var indexDistance = distance.indexOf((i) <= 100); 
     console.log(indexDistance); 
    }; 

addresses(); 
+0

数字を探すときにインデックスのブール値を与えるのはなぜですか? indexofはマクロではありません。それはそのようには機能しません。 – Carcigenicate

+0

潜在的な "goto fail"バグを避けるために、中括弧の中にループの内容を入れたほうがよいでしょう。 –

+0

ありがとう@Carcigenicate今私はそれが動作しない理由を知っていると思います。ブール値はNaNと==のように特定のケースで数値に作用しますか?私はコーディングを始めたばかりで、アドバイス、批評、指示には開放されているので、答えに感謝します。 –

答えて

0

indexOfは、引数の最初のインデックスを返します。不等式を与えています。不等式は渡される前にブール値に評価されます。つまり、数字だけを含む配列のブール値を検索するように基本的に指示しています。それが-1を返す理由です。あなたのリストにはリテラルtrueまたはfalseの値は含まれていません。

私はあなたがfilterを探していると信じて:

// Find all numbers <= 100 
var smallest = 
    filter(n => n <= 100, distance) 

// Get their indices 
var indices = 
    map(n => distance.indexOf(n), smallest); 

これは、すべての数字のすべてのインデックスを検索します。最初の数値のインデックスのみを100未満にしたい場合は、少し簡略化することができます。

// Find all numbers less than 100 
// then grab the first 
var smallest = 
    filter(n => n <= 100, distance)[0] 

// Get the index 
var index = 
    distance.indexOf(smallest). 
+0

私は何が起こっているのかを見やすくするために配列を単純化し、これを試しました。 –

+0

var distance = [100,101,100.5,9]; VAR最小= distance.filter(N => N <= 100、距離)を[0] //インデックスVARのインデックスを取得= distance.indexOf(最小) }。 addresses(); –

+0

@BobDeckard注:これは「手動」方法です。 torazaburoは、ほぼ同じことを達成するための簡単な方法について言及しています。 – Carcigenicate

2

この関数は既に存在します。それはfindIndexと呼ばれています。

distance.findIndex(i => i <= 100) 
関連する問題