質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

React.jsにてfilterをつかい複数条件のフィルターをかけれるようにしたい

Tomato_leaf
Tomato_leaf

総合スコア170

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

1回答

0グッド

0クリップ

526閲覧

投稿2022/08/07 11:39

前提

Reactでjsonデータを取得し、名前でユーザーを検索できるシステムを作っています。
firstNameもしくはlastNameで検索をかけれるようにしたいと
思いましたが実装中に以下のエラーメッセージが発生しました。

実現したいこと

  • jsonにあるユーザーのデータでfirstNameもしくはlastNameでユーザーを検索できるようにしたい

発生している問題・エラーメッセージ

'lastName' is not defined no-undef

とでて、複数条件の検索ができないでいます。

該当のソースコード

React.js

1import React, {useState, useEffect} from 'react'; 2import axios from 'axios'; 3import { useForm } from "react-hook-form"; 4 5const Top = () => { 6 const [ posts, setPosts] = useState([]); 7 const [ allPosts, setAllPosts] = useState([]); 8 const { register, handleSubmit } = useForm(); 9 10 // Gradeの平均スコアを出す関数 11 const gradesAverage = (grades) => { 12 let sum = 0; 13 grades.forEach(function(score) { 14 sum += Number(score); 15 }); 16 let ave = sum / grades.length 17 return ave; 18 }; 19 20 // ユーザーの入力キーワードをState化する 21 const [searchKeyword, setSearchKeyword] = React.useState(""); 22 23 useEffect(() => { 24 axios.get('https://api.hatchways.io/assessment/students') 25 .then(result => { 26 setPosts(result.data.students); 27 setAllPosts(result.data.students); 28 }) 29 }, []); 30 31 const getSearchResult = (data) => { 32 setSearchKeyword(data.search) 33 const result = allPosts.filter((output, index) => { 34 console.log(output) 35 return output.firstName||lastName.includes(data.search); 36 }); 37 console.log(result) 38 setPosts(result); 39 } 40 41 return ( 42 <div> 43 <div> 44 <form onSubmit={handleSubmit(getSearchResult)}> 45 <input placeholder="" className='' {...register('search', { required: true })} /> 46 <input className='btn btn-secondary' type="submit" value="Search" /> 47 </form> 48 </div> 49 <div> 50 {searchKeyword && 51 <p>{searchKeyword}で検索</p> 52 } 53 {posts ? 54 <> 55 {posts.map((data, i) => 56 <div key={i}> 57 <div className="flex"> 58 <div className="image"> 59 <img src={data.pic} className="profile" /> 60 </div> 61 <div> 62 <p className="name">{data.firstName} {data.lastName}</p> 63 <div className="info"> 64 <p>Email: {data.email}</p> 65 <p>Company: {data.company}</p> 66 <p>Skill: {data.skill}</p> 67 <p>Average Grade: {gradesAverage(data.grades)}%</p> 68 </div> 69 </div> 70 </div> 71 </div> 72 )} 73 </> 74 : 75 <div> 76 <p>Not Found!</p> 77 </div> 78 } 79 </div> 80 </div> 81 ); 82} 83export default Top;

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

1

ベストアンサー

サボらずに、「firstNameが含まれる」「lastNameが含まれる」の条件を書いて、それを||で繋いでください。

javascript

1return output.firstName.includes(data.search)||output.lastName.includes(data.search);

投稿2022/08/07 13:01

maisumakun

総合スコア142161

Tomato_leaf👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Tomato_leaf

2022/08/08 03:55

なるほど!うまくいきました!

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。