ES6の復習メモ


find

//こんなオブジェクトがあったとして
let users = [
    {name: 'jill'},
    {name: 'Alex'},
    {name: 'Bill'},
]

//Alexだけ探したい!みたいなとき従来のfor文だとこんな感じ
let user;
for(let i = 0; i < users.length; i++){
   if(users[i].name === 'Alex'){
     user = users[i];
     console.log(user)
  }
}

findを使うとこうできる


users.find((user) => {
  //retrnを忘れると動かないので注意
  return user.name === 'Alex';
})

//これがretrunされる
{name: "Alex"}

findの応用例

//投稿されたオブジェクトがあったとして
let posts = [
    {id: 1, title: 'New post'},
     {id: 2, title: 'Old post'},
]

//コメントが追加されたとする それをfindを使って見つける
let comment = { postId: 1, content: 'Create Post'};

//posts,commentを引き渡して以下の処理を実行する
function postForComment(posts, comment){
 //postsのオブジェクトの中で、post.idとcomment.postIdが一緒のものをretrunで返す
 return posts.find((post) =>{
    return post.id === comment.postId;
  })
}
//関数を実行すると
postForComment(posts, comment);

{id: 1, title: "New post"}が返ってくる

filter

//最初は古い書き方
let producets = [
 { name : 'cucmber', type: 'vegetable'},
 { name : 'banana', type: 'fruit'},
 { name : 'celery', type: 'vegetable'},
 { name : 'orange', type: 'fruit'},
]

let array = []

for(let i = 0; i < producets.length; i++){
 if(producets[i].type === 'fruit'){
  array.push(producets[i])
 }
}

//filterを使うと特定の物をフィルタリングできる
producets.filter((product) => {
 return product.type == 'fruit'
})
//これが返ってくる 0: {name: "banana", type: "fruit"}1: {name: "orange", type: "fruit"}length: 

filter応用例

//さらに応用のフィルタリング
let array = [
 { name : 'cucmber', type: 'vegetable', quantity: 0, price: 1},
 { name : 'banana', type: 'fruit', quantity: 10, price: 15},
 { name : 'celery', type: 'vegetable', quantity: 30, price: 13},
 { name : 'orange', type: 'fruit', quantity: 3, price: 5},
]
// typeが野菜で、quantityが0より大きく、priceが10より小さいものでフィルタリング
array.filter((item)=> {
 return item.type === 'vegetable'
 && item.quantity > 0
 && item.price < 10
})

//既存のままだと野菜ではフィルタリングしても存在しないので、オブジェクトを以下のように変更するとちゃんとそれだけがフィルタリングされて値が返ってくる
 { name : 'celery', type: 'vegetable', quantity: 30, price: 9},

filter活用場面的な

//投稿された値がオブジェクトであって
let post = {id: 4, title: 'New post'};

//コメントのオブジェクトにpostIdとcontentが入っている
let comments = [
    {postId: 4, content: 'awsome post'},
    {postId: 3, content: 'it was ok'},
    {postId: 4, content: 'no!'},
]

//フィルタリングする用の関数を作って、紐づいているものを取得したいとする
function comentForPost(post, comments){
 //commentsのオブジェクトをフィルタリングして
 return comments.filter((comment)=> {
  //postIdと引数で渡されたpost.idに一致したものを返す
  return comment.postId === post.id;
 })
}
//実際に関数を実行してフィルタリングしてみると

comentForPost(post, comments)
//(2) [{…}, {…}]
//0: {postId: 4, content: "awsome post"}
//1: {postId: 4, content: "no!"}
//というように値をフィルタリングすることができる

filter問題

//50より大きいものだけをフィルタリングしなさい
let numbers = [15, 25, 35, 45, 55, 65, 75, 85, 95];

let filteredNumbers = numbers.filter((nums) => {
    return nums > 50
})