(※検索はループ文と条件文を使って実装)
filterとmapを使う手もありますよ。
console.log(companyInfo.filter(info => info.contact == '給与係')
.map(info => info.phone));
配列内の検索をするにはどのようなコードを書けばいいでしょうか?(javascriptです)
以下のデータから、連絡先が給与係となっているデータを検索し、検索したデータの電話番号をコンソールに表示したいと思っています。
(※検索はループ文と条件文を使って実装)
どのように実装すればいいでしょうか?
先頭が部署、次が連絡先、その次が電話番号となります)をオブジェクトとして持つ配列を作成しています。
const companyInfo = [
{ department: '秘書室', contact: '代表', phone: '092-643-3000' },
{ department: '総務部', contact: '部長室', phone: '092-643-3020' },
{ department: '総務部', contact: '次長室', phone: '092-643-3022' },
{ department: '人事課', contact: '課長室', phone: '092-643-3035' },
{ department: '人事課', contact: '総務係', phone: '092-643-3036' },
{ department: '人事課', contact: '人事第一係', phone: '092-643-3038' },
{ department: '人事課', contact: '人事第二係', phone: '092-643-3037' },
{ department: '人事課', contact: '給与係', phone: '092-643-3040' },
{ department: '人事課', contact: '別室', phone: '092-643-3042' }
];
エラーは出ていません。```
### 自分で試したこと
大体以下のような手順で書きたいのですが、それを実際どのように書けばいいのかわかりません。
1.companyInfoの0〜配列のサイズ分(8)まわるfor文のループ
2.ループの中で、companyInfoの中のオブジェクトのcontactが '給与係'となっているものを探す。
3.見つけたらconsoleにphneを出力する。
(※検索はループ文と条件文を使って実装)
filterとmapを使う手もありますよ。
console.log(companyInfo.filter(info => info.contact == '給与係')
.map(info => info.phone));
@limemint
Questioner表示されているサンプルのcompanyInfo
ではcontact: '給与係'
は一つだけのようです。これを利用する場合は、findを使って下記のようなサンプルスクリプトはいかがでしょうか。
const companyInfo = [
{ department: '秘書室', contact: '代表', phone: '092-643-3000' },
{ department: '総務部', contact: '部長室', phone: '092-643-3020' },
{ department: '総務部', contact: '次長室', phone: '092-643-3022' },
{ department: '人事課', contact: '課長室', phone: '092-643-3035' },
{ department: '人事課', contact: '総務係', phone: '092-643-3036' },
{ department: '人事課', contact: '人事第一係', phone: '092-643-3038' },
{ department: '人事課', contact: '人事第二係', phone: '092-643-3037' },
{ department: '人事課', contact: '給与係', phone: '092-643-3040' },
{ department: '人事課', contact: '別室', phone: '092-643-3042' }
];
const res = companyInfo.find(({contact}) => contact == '給与係')?.phone;
console.log(res)
@limemint
Questionerお困りとのことで、Javascriptは触ったことがなかったのですが、調べながら実装してみました。
一番スマートなやり方かどうかは検証しておりませんので、他にもっといい方法があるかと存じますが、一応実装できたので情報共有致します。
const companyInfo = [
{ department: '秘書室', contact: '代表', phone: '092-643-3000' },
{ department: '総務部', contact: '部長室', phone: '092-643-3020' },
{ department: '総務部', contact: '次長室', phone: '092-643-3022' },
{ department: '人事課', contact: '課長室', phone: '092-643-3035' },
{ department: '人事課', contact: '総務係', phone: '092-643-3036' },
{ department: '人事課', contact: '人事第一係', phone: '092-643-3038' },
{ department: '人事課', contact: '人事第二係', phone: '092-643-3037' },
{ department: '人事課', contact: '給与係', phone: '092-643-3040' },
{ department: '人事課', contact: '別室', phone: '092-643-3042' }
];
for(const element of companyInfo){
if(~element.contact.indexOf('給与係')) {
console.log('電話番号は' + element.phone + 'です');
}
}
こちら、paiza.ioのサイトにて実行した結果、当方の環境では以下のような結果が得られました。
paiza.io 実際のコード
電話番号は092-643-3040です
いかがでしょうか。
繰り返しになりますが、当方はJavascriptに触れたことがございませんので、他のエンジニアの方からご教授ありましたらそちらをご参考くださると幸いです。
@limemint
Questioner