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

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

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

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

Q&A

解決済

1回答

8239閲覧

filterをかける要素がnullの場合の条件分岐 [TypeError: Cannot read property 'filter' of null]

bws

総合スコア98

JavaScript

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

0グッド

0クリップ

投稿2019/06/12 04:44

編集2019/06/12 05:59

やりたいこと

allPosts.edges.node.tags.wordpress_idAllTags.nodes.wordpress_idが一致したものをtagPostsに代入して取得しています。

困っていること

allPosts.edges.node.tagsが存在しない場合もある為、
TypeError: Cannot read property 'filter' of nullとなってしまいます。

allPosts.edges.node.tagsnullの場合の条件分岐はどのように書けば良いでしょうか?
よろしくお願いします。

コード

allTags.forEach(tag => { const tagPosts = allPosts.filter(edge => edge.node.tags.filter(post_tag => post_tag.wordpress_id === tag.wordpress_id).length ); })

修正コード追記

allTags.forEach(tag => { const tagPosts = allPosts.filter(edge => (edge.node.tags || []).filter(post_tag => post_tag.wordpress_id === tag.wordpress_id).length ); console.log(tagPosts) })

上記のように修正したところすべて[]になってしまいました。

allPosts, allTags

allPosts

[ [Object: null prototype] { node: [Object: null prototype] { wordpress_id: 2069, date: '2014-01-05', slug: 'verylong', title: '1行分しか想定されていない見出しのデザインだと文字がはみ出してしま ってあら大変。ものすごく長い日本語のタイトルが付いた記事の表示テストです。 複数行になっても問題ないデザインだといいですね。あと前後の記事へのリンクを 出力している場合や、パンくずリストを実装している場合なども表示にズレがない か確認しておきましょう。', categories: [Array], tags: null, featured_media: null } }, [Object: null prototype] { node: [Object: null prototype] { wordpress_id: 1178, date: '2013-01-12', slug: 'markup-html-tags-and-formatting', title: 'マークアップ: HTML タグとフォーマット', categories: [Array], tags: { name: 'WordPress', slug: 'wordpress' }, featured_media: null } }, [Object: null prototype] {

allTags

[ [Object: null prototype] { wordpress_id: 77, name: '8ビット', slug: '8bit' }, [Object: null prototype] { wordpress_id: 78, name: 'aside', slug: 'aside' }, [Object: null prototype] { wordpress_id: 79, name: 'Codex', slug: 'codex' }, [Object: null prototype] { wordpress_id: 80, name: 'css', slug: 'css' }, [Object: null prototype] { wordpress_id: 81, name: 'FTW', slug: 'ftw' }, [Object: null prototype] { wordpress_id: 82, name: 'html', slug: 'html' }, [Object: null prototype] { wordpress_id: 83, name: 'jetpack', slug: 'jetpack' }, [Object: null prototype] { wordpress_id: 2, name: 'test', slug: 'test' }, [Object: null prototype] { wordpress_id: 84, name: 'twitter', slug: 'twitter' }, [Object: null prototype] { wordpress_id: 85, name: 'videopress', slug: 'videopress' }, [Object: null prototype] { wordpress_id: 86, name: 'Webアプリケーション', slug: 'web%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3 %83%b3' },

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

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

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

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

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

m.ts10806

2019/06/12 05:58 編集

前提となる開発環境やサーバーの情報などご提示ください。 WordPressなりなんなりキーワードがコード内にあるようですが、 何かしら影響するのではないでしょうか
bws

2019/06/12 05:43

ありがとうございます。 gatsbyという静的サイトジェネレーターを使ってwordpress rest apiのデータを取得しています。 javascriptの疑問ですし、回答がつきにくくなるかと思いまして記述しませんでした。
m.ts10806

2019/06/12 05:59

むしろ専門知識が必要となるケースなのでつける必要はありそうに思います。 REST と WordPress
guest

回答1

0

ベストアンサー

  • if(候補!==null)でチェックをするか
  • null||で別候補を上げるか

javascript

1var a=null; 2var b=(a||[]).filter(()=>true); 3console.log(b); 4

投稿2019/06/12 04:50

yambejp

総合スコア114742

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

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

bws

2019/06/12 05:45

ありがとうございます。 二重でfilterがかかっているのでどこにif文を書いたら良いのかわからかったのと、二つ目の方法で追記2のように修正したところすべて[]が返ってきてしまいました。どこか間違えてしまっているでしょうか?
yambejp

2019/06/12 05:51 編集

allTagsやallPostsの具体的な内容がわかるサンプルは提示できますか? (いらないところはガッツリ割愛してもらって構いません)
bws

2019/06/12 06:05

allPostsの内容を確認したところ、allPostsにwordpress_idが無いのに気がつきました。 二つ目の方法で分岐することができました。確認不足でとても申し訳ないです、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問