# 配列の要素がオブジェクトの場合の検索

配列の要素が以下のようなオブジェクトの検索の場合は、`find`メソッドを使用します。findメソッドは真偽値を返す関数を引数にとります。下記の場合は、productというオブジェクトに対して、findメソッドを呼び出し、`(product) => product.id === 1`という関数を渡しているのですが、productという引数は、productsの要素が1つずつ格納され、評価を行なっていきます。`product.id === 1`が`true`となった場合に、その要素が返却されます。以下の場合は、product1に`{id: 1, name: 'りんご'}`のオブジェクトが格納されます。もし`true`になる要素がない場合は、`undefind`が返却されます。

<pre class="language-javascript" data-title="index.js◎"><code class="lang-javascript">...
console.log(fruits.indexOf("柿")); // -1

<strong>const products = [
</strong><strong>    { id: 1, name: 'りんご' },
</strong><strong>    { id: 2, name: 'みかん' },
</strong><strong>    { id: 3, name: 'パイナップル' },
</strong><strong>]
</strong><strong>const product1 = products.find((product) => product.id === 1)
</strong><strong>console.log(product1) // { id: 1, name: 'りんご' }
</strong><strong>const product2 = products.find(() => product.id === 4);
</strong><strong>console.log(product2); // undefined
</strong></code></pre>

　また、`findIndex`というメソッドがあります。こちらは、要素の位置を返却します。要素が存在しない場合は、`-1`を返却します。

<pre class="language-javascript" data-title="index.js◎"><code class="lang-javascript">...
console.log(product2); // undefined
<strong>const productIndex1 = products.findIndex((product) => product.id === 1);
</strong><strong>console.log(productIndex1); // 0
</strong><strong>const productIndex2 = products.findIndex((product) => product.id === 4);
</strong><strong>console.log(productIndex2); // -1
</strong></code></pre>
