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

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

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

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

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

解決済

1回答

1435閲覧

javascript 2つの連想配列で一致箇所追加2

snakeriver

総合スコア76

JavaScript

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

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

0クリップ

投稿2016/06/23 08:52

以下のような連想配列が2つあり、attendanceの方に名前nameのfirst と日付(date)が合えば、
dataの配列のvehicleとstaffのdepを追加する処理を記述しています。
しかし2点問題があります。

1)staffがnullの場合staff.depと記述すると以下のエラーが表示されてしまいます。
TypeError: Cannot read property 'dept' of null
なので以下のように記述しましたが、「injectData.indexOf is not a function」とエラーになってしまいます。

if (injectData){ if (injectData.indexOf(injectData.mdItemDto.name) == -1){ target.mdItemDto = { mdItemDto: injectData.mdItemDto}; }else{ target.mdItemDto = { name: injectData.mdItemDto.name }; }

2)2つの配列で一致すれば追加という処理でnameのfirst が認識されません。

function(dataN){ return ( target.date==dataN.date && target.name.first==dataN.name.fist ) }

上記2つの問題に関してご教示お願いいたします。

var attendance ={ "obj1":{"date":"2015-01-01","name":{"first":"fist1","last":"last1"},"出勤":"09:00:00","退勤":"18:00:00"}, "obj2":{"date":"2015-01-01","name":{"first":"fist2","last":"last2"},"出勤":"10:00:00","退勤":"20:00:00"}, "obj3":{"date":"2015-01-02","name":{"first":"fist6","last":"last6"},"出勤":"09:00:00","退勤":"18:00:00"}, "obj4":{"date":"2015-01-02","name":{"first":"fist7","last":"last7"},"出勤":"10:00:00","退勤":"20:00:00"} }; var data ={ "data1":{"date":"2015-01-01","name":{"first":"fist1","last":"last1"},"vehicle":"car", "staff":{"id":"01","dep":"sales"}}, "data2":{"date":"2015-01-01","name":{"first":"fist2","last":"last2"},"vehicle":"car", "staff":{"id":"02","dep":"engineer"}}, "data3":{"date":"2015-01-01","name":{"first":"fist3","last":"last3"},"vehicle":"train","staff":{"id":"03","dep":"bookkeeper"}}, "data4":{"date":"2015-01-01","name":{"first":"fist4","last":"last4"},"vehicle":"train", "staff":{"id":"04","dep":"engineer"}}, "data5":{"date":"2015-01-02","name":{"first":"fist5","last":"last5"},"vehicle":"train", "staff":{"id":"01","dep":"sales"}} }; var attendance_and_vehicle = Object.keys(attendance).reduce( function(dict, key){ var target = attendance[key]; var injectData = Object.keys(data).map( function(key){ return data[key] //document . write("data[key]: "data[key] +"<br>" ); } ).filter( function(dataN){ return ( target.date==dataN.date && target.name.first==dataN.name.fist ) } )[0] if (injectData){ target.vehicle = injectData.vehicle; target.staff = { dept: injectData.staff.dep }; } else { target.vehicle = undefined; target.staff = { dept: undefined }; } dict[key]= target; return dict; },{});

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

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

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

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

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

guest

回答1

0

ベストアンサー

1)staffがnullの場合staff.depと記述すると以下のエラーが表示されてしまいます。

var dep = (injectData.staff || {}).dep;
このように書けばstaffがnullの場合のNullExceptionを回避できます。

2)2つの配列で一致すれば追加という処理でnameのfirst が認識されません。

typo: dataN.name.fist
fist -> first

投稿2016/06/23 13:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問