はじめに
オブジェクトの配列内のある項目について、存在チェックを行いたい機会があり、findIndex関数
を使うと便利だったのでそのメモです。
*some関数での用法を追記しております。
@ttatsfさんありがとうございます!
文中で使用している、some関数、findIndex関数、アロー関数はES6
以降対応なのでご留意ください。
some()で存在チェック
some関数は配列の中に条件を一つでも満たすものがあれば、trueを返します。
単純な存在チェックだけですと、こちらの方が良さそうです。
*@ttatsfさんありがとうございます!
const users = [
{id:1, name:"Ichiro", language:"python"},
{id:2, name:"Jiro", language:"ruby"},
{id:3, name:"Saburo", language:"java"},
{id:4, name:"Shiro", language:"python"}
];
// true
console.log(users.some(user => user.language === "python"));
// false
console.log(users.some(user => user.language === "php"));
findIndex()で存在チェック
実行例です。findIndexの仕様として、見つかった場合はインデックス番号を、見つからない場合は-1
を返します。
*冗長だったコードを修正しました。
@ttatsfさんありがとうございます。
const users = [
{id:1, name:"Ichiro", language:"python"},
{id:2, name:"Jiro", language:"ruby"},
{id:3, name:"Saburo", language:"java"},
{id:4, name:"Shiro", language:"python"}
];
// true
console.log(users.findIndex(user => user.language === "python") != -1);
// false
console.log(users.findIndex(user => user.language === "php") != -1);
補足
以下のような書き方もできます。オブジェクトの構造が頭に入ってないと読みにくい気もしますが。。
// true
console.log(users.findIndex(({language}) => language === "python") != -1);