🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Q&A

1回答

447閲覧

JavaScriptのあるオブジェクトが空の場合、バックエンドと疎通をする際に送信するリクエストボディの特定のキーを除外したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2021/03/10 08:19

編集2021/03/10 08:20

聞きたいこと

バックエンドと疎通をする際に、下のようなJavaScriptのオブジェクトをaxiosを使用して送信しています。
ただ、送信するオブジェクトに存在している、キー questions ansewrs に関しては、バリューで使用しているオブジェクト自体が空であればバックエンドの送信しない仕様としたいと思っています。

  • オブジェクト

JavaScript

1{ 2 id: id, // -> string 3 name: name, // -> string 4 division: division, // -> string 5 prefecture: prefecuture, // -> string 6 birthday: birthday, // -> Date 7 gender: gender,// -> number 8 questions: questions, // -> Object 9 answers: answers, // -> Object 10 : 11}

今思いつくのだと、下のようにそれぞれのキーに対するバリューがから出ないかチェックする方法しか思いつきません。

if (question && answers) { axios .post('/api/sample/', { id: id, name: name, division: division, prefecture: prefecuture, birthday: birthday, gender: gender, questions: questions, answers: answers, }) .then(res => { : }) .catch(error => { : }); } if (question) { axios .post('/api/sample/', { id: id, name: name, division: division, prefecture: prefecuture, birthday: birthday, gender: gender, questions: questions, // answers: answers, }) .then(res => { : }) .catch(error => { : }); } if (answer) { axios .post('/api/sample/', { id: id, name: name, division: division, prefecture: prefecuture, birthday: birthday, gender: gender, // questions: questions, answers: answers, }) .then(res => { : }) .catch(error => { : }); }

もっとスマートに実装するためのライブラリーや方法などありましたら教えていただきたいです。

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

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

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

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

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

Lhankor_Mhy

2021/03/10 09:05

axios について詳しくないので的外れでしたら申し訳ないのですが、少し試してみたところ、undefined を渡すと送信データに含まれないようでした。
guest

回答1

0

普通にオブジェクトを一旦変数にいれて、フィルタしてからaxiosに与えればよいのでは?

axiosの知識がなくてもうしわけないですがaxiosってjsonを介さずにobjectを
サーバーに送れるものなのでしょうか?

javascript

1const data={ 2id: "aaa", 3name: "bbb", 4division: "ccc", 5prefecture: "ddd", 6birthday: new Date(), 7gender: 1, 8questions: undefined, 9answers: {test:2}, 10}; 11["questions","answers"].forEach(x=>{ 12 if(typeof data[x]=="undefined") delete(data[x]); 13}); 14console.log(data);

投稿2021/03/10 09:47

yambejp

総合スコア116661

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

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

yambejp

2021/03/10 09:51

fetchでテスト const body=Object.entries(data).reduce((x,y)=>(x.append(y[0],y[1]),x),new FormData()); fetch("send.php",{body,method:"post"}).then(res=>res.text()).then(console.log);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問