2016-12-13 9 views
0

私はこのようなデータを持つ配列を持っています。配列内の要素番号を取得する

var objects = [ 
{ 
    "rowid": 1, 
    "Hostname": "11 Com" 
}, 
{ 
    "rowid": 2, 
    "Hostname": "11 UMi" 
}, 
{ 
    "rowid": 3, 
    "Hostname": "14 And" 
    }, 
{ 
    "rowid": 5, 
    "Hostname": "23 A" 
    }]; 

私は各オブジェクトの要素番号の位置を取得しようとしています。各オブジェクトは、独自の「行番号」で構成され、それは私は現在、この機能で、その素子の位置を取得するために使用しているものを基本的にです:

function findCorrespondingNumber(hostname) { 
     function search(am, im) { 
     if (am.Hostname === hostname) { 
      index = im; return true; } 
     } var index; 
    if (objects.some(search)) { 
     return objects[index]['rowid']; 
    } 
} 
var correspNumb = findCorrespondingNumber(name) - 1; 
var fiff = objects[correspNumb]["Hostname"]; 

データセットの問題は、数字が時々シーケンスをスキップすることができるということです。 rowid 3の後には、4でなく5が続きます。これはさらなるコードで問題を引き起こしているので、rowid 5のオブジェクトが4番目のオブジェクトとして読み込まれるようにする必要があります。私はそのコードをどのように書くのですか?

+1

与えられた入力 '23 A'に対して' 3 '(インデックス)を返す 'function'が必要ですか? – haim770

+1

「要素番号」とは、配列インデックスを意味しますか?たとえば、あなたの例では0〜3ですか? –

+0

あるいは、配列をROWIDでソートしたいのですか?これは、配列を順番に処理したい場合に役立ちます。 – scunliffe

答えて

2

あなたはArray#findIndexを探していると思いますが、それはES2015で追加されました。これは、述語関数を受け入れ、(それがないことがない場合は-1)述語がtruthy値を返すために最初のエントリのインデックスを返します。

var index = objects.findIndex(function(entry) { 
    return entry.Hostname == hostname; 
}); 

あなた0ベースのインデックスを与えること(そうあなたの例では0 - 3)。 1ベースのインデックス(例では1〜4、「3を3番目のエントリに返す」とした場合)を結果に追加します。

密接に関連Array#findは同じことを行いますが、実際のエントリを返し、もあります:

var entry = objects.find(function(entry) { 
    return entry.Hostname == hostname; 
}); 

はどちらも新しめですが、両方ともpolyfilled /シムことができます。

+1

OPのようなサウンドは、1ベースのインデックスを望んでいます – haim770

+0

@ haim770:そうです、「3番目のエントリに3を返します」というコメント。 –

関連する問題