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

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

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

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

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

Q&A

解決済

1回答

1450閲覧

JS find 文字取得

ryuxx

総合スコア18

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

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

0グッド

0クリップ

投稿2020/07/13 03:35

JavaScript

1let hoge =[ 2{ 3piyo:{ 4 “hoge”:{ 5 name:”ホゲ”, 6 fuga:{ 7 id:1 8 } 9 }, 10 “fuga”:{ 11 name:”フガ“, 12  fuga:{ 13 id:2 14 } 15 } 16}] 17 18let fuga=[ 19 { 20 value:1 21 label:22 }, 23 { 24 value:2 25 label:26 } 27]

上記のようなコードがあった際に
findを使ってそれぞれのhogeとfugaのidを一致させてlabelを取得することができません。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/07/13 04:49 編集

とりあえずその中途半端な全角のエンクロージャをとるなり 半角ダブルクォーテーションに変えるなり修正してください それとhoge,fugaが二重三重に設定されていますが これはそのhoge,fugaを利用してなにか探るのでしょうか? それともあり意味もなくつかっているのでしょうか?
kei344

2020/07/13 04:49

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
guest

回答1

0

ベストアンサー

PHPは配列も連想配列も同じものを指します。
(余談ですがPHP7系では速度の為に、内部的なロジックをいじっています。その結果、配列としての使い方をしている箇所ではメモリ空間上でシンプルな配列にする機能を盛り込んでいますが、コードや仕様上で区別されるわけではありません。超早口)

なのでarray_search関数等を連想配列・配列を気にせず使って探しにいっても問題ありません。


しかし、JavaScriptは連想配列的な役割を果たす汎用オブジェクトは、配列とは明確に区別されます。
配列はArrayオブジェクトのインスタンスですのでfind等のメソッドを呼び出せますが、
汎用オブジェクトにはfind等のメソッドは無いので使えません。

したがって、質問への回答は「出来ません」になります。
まぁ実務では出来ませんは通用しないので、
何とか工夫しましょうね。


工夫の仕方は下記2パターンのいずれかになります。

  • 可変のキーはやめて、オブジェクトの配列で留める事を徹底
  • Object.entries等を用いて汎用オブジェクトを配列に加工してからfindメソッドにアクセス

コード量が減り、シンプルに良い実装になるのが上のプランです。
シンプルで加工しやすいデータを所持しておくというのはとても重要なので、
是非そちらで運用しましょう。

js

1let hoge = { 2 piyo: [ 3 {id:"hoge", name:"ホゲ", fuga:{id:1}}, 4 {id:"fuga", name:"フガ", fuga:{id:2}}, 5 ], 6} 7 8const id = hoge.piyo.find(it => it.id == "hoge").fuga.id; 9console.log(1); 10// 1 11 12let fuga=[ 13 { 14 value:1, 15 label:"男" 16 }, 17 { 18 value:2, 19 label:"女", 20 } 21] 22 23console.log(fuga.find(it => it.value == id)); 24// {value: 1, label: "男"}

まぁ、下の方は最後の手段です。
元々のシステムに組み込む場合は綺麗事だけでは解決出来ませんからね。

fuga.piyoの所をObject.entriesやObject.valuesで包んだ値を一時的に用意居しておいてそれを使うだけなので割愛。
この方針のどちらかで進めてみてください。

投稿2020/07/13 05:06

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問