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

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

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

Lodashは、JavaScriptのユーティリティライブラリ。Underscoreの派生ライブラリで、配列・オブジェクトの操作に便利です。また、コードの可読性も高めることができます。

JavaScript

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

Underscore.js

Underscore.jsは、JavaScriptのためのユーティリティライブラリです。JavaScriptの関数・配列、オブジェクトを扱う際に度々発生する処理がメソッドとしてまとめられています。他のライブラリに依存しないため、稼働中のアプリケーションにも導入可能です。

Q&A

解決済

1回答

7201閲覧

深くネストした配列の中に、条件にマッチしたものがあるかどうかをチェックしたい

machine_machine

総合スコア162

Lodash

Lodashは、JavaScriptのユーティリティライブラリ。Underscoreの派生ライブラリで、配列・オブジェクトの操作に便利です。また、コードの可読性も高めることができます。

JavaScript

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

Underscore.js

Underscore.jsは、JavaScriptのためのユーティリティライブラリです。JavaScriptの関数・配列、オブジェクトを扱う際に度々発生する処理がメソッドとしてまとめられています。他のライブラリに依存しないため、稼働中のアプリケーションにも導入可能です。

0グッド

0クリップ

投稿2016/11/20 04:25

サーバーから受け取った json (下記サンプルでは data に格納しています)の中から、『points"0" または 空("") のものがあるかどうか』をチェックしたいです。型は文字列です。

key_1key_2 というやや構造の異なる大きい配列がふたつあり、そのどちらもチェックする必要があります。

どちらか片方にでも 0 か 空 のものがあれば true を返します。

チェック自体は下記のscriptでできたのですが
forEach が入れ子になっていたり、
チェック用に空の配列を用意したりするところが冗長で非効率なのではと思っています。

いいやり方がありましたらお教えいただきたいと思っています。

IE9 も対応するので Array の便利な関数は一部使えないのですが、lodash などでできる方法があればそちらでも結構です。

// サーバーからの json の戻り値とお考えください var data = { "key_1" : [ { "key_1_1" : [ { "key_1_2" : [ { "points" : "10000", } ] }, { "key_1_2" : [ { "points" : "0", } ] } ] } ], "key_2" : [ { "key_2_1" : [ { "points" : "9999", } ] } ] }; // key_1の結果を入れるための空の配列 var arr = []; // key_2の結果を入れるための空の配列 var arr2 = []; // key_1の中にpointsが 0 または 空 のものがあるか data.key_1.forEach((a) => { a.key_1_1.forEach((b) => { arr = b.key_1_2.filter((c) => { return c.points === '0' || !c.points; }); }); }); // key_2の中にpointsが 0 または 空 のものがあるか data.key_2.forEach((a) => { arr2 = a.key_2_1.filter((b) => { return b.points === '0' || !b.points; }); }); // key_1, key_2 どちらかに pointsが 0 または 空 のものがあるか // (arr.length !== 0 || arr2.length !== 0) ? true : false;

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

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

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

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

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

guest

回答1

0

ベストアンサー

末端が0か空の場合にtrueを返す関数です。

javascript

1function contain_zero_empty(json_data){ 2 //0か空ならtrueを返す 3 if(json_data == 0 || json_data.length == 0){ 4 return true 5 } 6 //json じゃなければ以下をチェックしない 7 if(typeof json_data != "object"){ 8 return false 9 } 10 //jsonを再帰呼び出しでチェック 一度でもtrueが返ればずっとtrue 11 var flag = false 12 for(var key in json_data){ 13 if(contain_zero_empty(json_data[key])){ 14 flag = true 15 } 16 } 17 return flag 18}

チェックしたい値の深さを引数で分けたり、親のkeyも引数で渡してチェックしたりしたらもっと細かい動作ができるかと思います。

投稿2016/11/20 08:08

intelf___

総合スコア868

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

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

machine_machine

2016/11/26 03:20

ありがとうございます。非常に参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問