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

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

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

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

Q&A

3回答

868閲覧

オブジェクトの中にある不特定多数なプロパティーの値がnullではないことをチェックしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

0グッド

1クリップ

投稿2019/10/11 08:15

javascriptなのですが、あるオブジェクトの中のプロパティーの値は、オブジェクト、値、配列で成り立っていると思います。
プロパティー数もネストの深さも関係なく、1つのオブジェクトから始まる全ての値がnullではないことを確認したいのですが、再帰的な処理になると手詰まっています。

だいぶ前にphpで配列のみの再起処理で何か作ったのですが、配列のみに限定されていてphpには慣れていたというところもあって作れましたが今回かなり手詰まっています。

再起的にしないといけないのはわかるのですが、サンプル的なものでも良いので提示いただけると助かります。

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

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

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

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

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

yambejp

2019/10/11 08:45

逆にサンプルはないですか? その範囲で提示できると思いますが・・・
退会済みユーザー

退会済みユーザー

2019/10/11 10:01

似たようなものはありますが、ドンピシャがなかなかないのです。。。 https://codeday.me/jp/qa/20190209/220983.html 可読性の問題もあるので、即時関数とかじゃなくてちゃんとメソッドを定義してそのメソッドを再帰的に呼び出しているようなサンプルを探しているのですが、あまりないのです。 想像以上に中身が多いので、全てチェックする必要はなく、1つでもnullがあったらその時点で判定処置を終了し、is_values_ nullableメソッドの返り値としてtrueを返したいのです。 配列の値に値は存在せず、配列の値は必ずオブジェクトになります。 ``` const a={ name: 'yamada', age:25, books: [ { title: 'aaa', buy_amount: 3000, }, { title: 'bbb', buy_amount: 2500, } ], } ```
guest

回答3

0

推奨していない質問

興味本位で書きましたが、コード作成依頼ですね。

コードをください・デバッグしてください等の丸投げの質問

何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。
問題や質問は実際に調査や作業に取り組み、具体的なところで生まれると考えるためです。
まずは実際に作業に取り組み、つまづいたところで投稿をしてみてください。

再帰版コード

Object型のenumerableな全プロパティを再帰的に検索するコード。

JavaScript

1function hasNull (obj) { 2 if (obj === null) { // Null 型 3 return true; 4 } 5 6 if (Object(obj) !== obj) { // Null型、Object型以外 7 return false; 8 } 9 10 for (let prop of Object.keys(obj)) { // Object型 11 if (hasNull(obj[prop])) { 12 return true; 13 } 14 } 15 16 return false; 17} 18 19console.log(hasNull({a: null})); // true 20console.log(hasNull({a: undefined})); // false 21console.log(hasNull({a: 0})); // false 22console.log(hasNull({a: NaN})); // false 23console.log(hasNull({a: ''})); // false 24console.log(hasNull({a: false})); // false 25 26console.log(hasNull({a:{b:[1,2,3]}})); // false 27console.log(hasNull([{a: [undefined,1,null]}])); // true

ただし、Object型が持つ全てのプロパティを検索するのが良い実装とは思いません。
対象によっては、スタックを使い切ります。

JavaScript

1hasNull(window); 2/* 3Uncaught RangeError: Maximum call stack size exceeded 4 at Object (<anonymous>) 5 at hasNull (<anonymous>:6:7) 6 at hasNull (<anonymous>:11:9) 7 at hasNull (<anonymous>:11:9) 8 at hasNull (<anonymous>:11:9) 9 at hasNull (<anonymous>:11:9) 10 at hasNull (<anonymous>:11:9) 11 at hasNull (<anonymous>:11:9) 12 at hasNull (<anonymous>:11:9) 13 at hasNull (<anonymous>:11:9) 14*/

Re: POSTMAN さん

投稿2019/10/12 04:44

編集2019/10/12 04:45
think49

総合スコア18166

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

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

0

ずるいですが、こういうのはどうでしょう・・・?

JavaScript

1const hasNull = JSON.stringify($a).match(/:null\b/) !== null;

投稿2019/10/12 03:06

tanishi_a

総合スコア484

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

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

0

とりあえずjsの再帰処理

javascript

1const a=[ 2 {x:1,y:100,z:[11,12,13]}, 3 {x:2,y:200,z:[21,22,23]}, 4 {x:3,y:300,z:[31,[100,"hoge"],33]}, 5 ]; 6const b=[ 7 {x:1,y:100,z:[11,12,13]}, 8 {x:2,y:200,z:[21,22,23]}, 9 {x:3,y:300,z:[31,[100,null],33]}, 10 ]; 11const array_values=v=>{ 12 var ret=[]; 13 if(/Number|String|Null/.test(Object.prototype.toString.call(v))){ 14 ret.push(v); 15 }else{ 16 Object.values(v).forEach(x=>{ret=ret.concat(array_values(x))}); 17 } 18 return ret; 19} 20const isnull_recursive=v=>{ 21 var ret=false; 22 if(/Null/.test(Object.prototype.toString.call(v))){ 23 ret=true; 24 }else if(!/Number|String/.test(Object.prototype.toString.call(v))){ 25 Object.values(v).forEach(x=>{if(isnull_recursive(x)==true) ret=true;}); 26 } 27 return ret; 28} 29console.log(isnull_recursive(a)); 30console.log(isnull_recursive(b)); 31console.log(array_values(a)); 32console.log(array_values(b));

投稿2019/10/11 09:29

yambejp

総合スコア115001

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問