2017-01-31 19 views
3

私は本当にjavascriptには新しく、オブジェクトの配列を持っています。配列内の要素を見つける方法

var cart = [ 
    { id: 1, price: 2 }, 
    { id: 2, price: 1 } 
]; 

と私はIDを見つけるために、forループを使用しています:

for (var i = 0; i < cart.length; i++) { 
    if (cart[i].id === id) { 
    return cart[i] 
    } 
} 

return null; 

私はfind()のような機能があります知っているが、私はそれを使用する方法についてあまりよく分かりません。誰も助けることができますか? find

答えて

5

、あなたはbabelを必要とするかもしれませんが、あなたが必要なだけのコード:

ES6

const id = 1; 
const found = cart.find(item => item.id === id) 

Vanilla

var id = 1; 
var found = cart.find(function(item) {return item.id === id}) 

find ES6と我々の場合には(機能を取ります。 () => {}は無名関数です)、それをリストのすべての項目に適用します.U ntilは最初の一致を検出します。一致したときはどのようにして知るのですか?関数がtrueを返すと、ループを切断して項目を返します。

もつとも

見つける使用しませんが、ループのための伝統的なよりも読みやすいかもしれないもう一つのオプション、:図書館のスルーはそこにあなたを助けることができることもあります

var id = 1; 
for(var item in cart) { 
    if(item.id == id) { 
    return item; 
    } 
} 
return null 

例:underscore.jslodash(これは私がカバーしませんが、あなたが本当に興味があるかどうかを見てみることができます)。

4

あなたは正しいです。 findと呼ばれる機能があります。あなたがfindで使用するコールバック関数を設定し、さらに(例えばidなど)のパラメータを受け入れるようにそれを設定することができます。このような問題では

var cart = [{ 
 
    id: 1, 
 
    price: 2 
 
}, { 
 
    id: 2, 
 
    price: 1 
 
}]; 
 

 
function byID(id) { 
 
    return function(element) { 
 
    return element.id == id; 
 
    } 
 
} 
 

 
var item = cart.find(byID(2)); 
 

 
console.log(item);

を、私は非常に感謝しますライブラリlodash

var cart = [{id: 1, price: 5}, {id: 2, price: 6}]; 
 

 
var item = _.find(cart, {id:2}); 
 

 
console.log(item);
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

:それはあなたがそうのようなものを行うことができます
関連する問題