teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

ソースコード修正

2020/10/29 12:28

投稿

TakeruYamamura
TakeruYamamura

スコア7

title CHANGED
File without changes
body CHANGED
@@ -34,182 +34,46 @@
34
34
  ### 該当のソースコード
35
35
 
36
36
  ```javascript
37
- var Search_NomalCampaign_Products = function() {
37
+ this.Search_Product_API = function(param_nomal, product_type_str){
38
+ // 親クラスのインスタンスを生成
39
+ var oya_class = this;
38
40
 
39
- // 検索結果を格納するリストを生成(通常商品)
41
+ // APIで通常商品の在庫状況を検索リストに格納
42
+ return new Promise(function(resolve, reject){
43
+ $.ajax({
44
+ url: 'APIのURL',
45
+ data: param_nomal,
40
- this.nomal_zaiko_list = [];
46
+ dataType: 'jsonp',
41
-
42
- // 検索結果を格納するリストを生成(キャンペーン商品)
43
- this.campaign_zaiko_list = [];
47
+ success: function(data){
44
-
45
- // セットの在庫判定結果リストを作成
48
+ // 検索結果リストに格納
49
+ for (var i = 0; i < data.length; i++) {
50
+ // 検索結果を変数に格納
46
- this.gift_set_hantei_list = [];
51
+ var shohin_cd = data[i].shohin_cd;
52
+ var zaiko_kbn = data[i].zaiko_kbn;
47
53
 
48
- // 通常商品を検索する関数
49
- this.Nomal_Products_Search = function(){
50
- // products.jsから商品情報を取得
51
- var nomal_params_list = Nomal_Products_json();
52
-
53
- // 親クラスのインスタンスを生成
54
- var oya_class = this;
55
-
56
- // 商品検索APIに送るパラメータを設定(商品区分は通常商品)
57
- var param_nomal = 'border=20&shohin_kbn=1';
58
- for (var i = 0; i < nomal_params_list.length; i++) {
59
- param_nomal = param_nomal + '&shohin_cd=' + nomal_params_list[i].shohin_cd;
60
- };
61
-
62
- oya_class.product_search_api(param_nomal).done(function (data) {
63
- // 検索結果をリストに格納
64
- for (var i = 0; i < data.length; i++) {
65
- // 検索結果を変数に格納
66
- var shohin_cd = data[i].shohin_cd;
67
- var zaiko_kbn = data[i].zaiko_kbn;
68
-
69
- // 検索結果をjsonに格納
54
+ // 検索結果をjsonに格納
70
- var result_json = {
55
+ var result_json = {
71
- "shohin_cd": shohin_cd,
56
+ "shohin_cd": shohin_cd,
72
- "zaiko_kbn": zaiko_kbn
57
+ "zaiko_kbn": zaiko_kbn
73
- };
74
-
75
- // 検索結果を格納したjsonをリストに追加
76
- oya_class.nomal_zaiko_list.push(result_json);
77
- };
78
- console.log(oya_class.nomal_zaiko_list);   ←このタイミングではJSONの連想配列になっている
79
-
80
- }).fail(function (data) {
81
- console.log("SearchAPI failed");
82
- });
83
-
84
-
85
- console.log(oya_class.nomal_zaiko_list);   ←このタイミングでは配列になっておらず要素が取り出せない
86
- };
87
-
88
- // キャンペーン商品を検索する関数
89
- this.Campaign_Products_Search = function() {
90
- // products.jsから商品情報を取得
91
- var campaign_params_list = Campaign_Products_json();
92
-
93
- // 商品検索APIに送るパラメータを設定(商品区分はキャンペーン)
94
- var param_campaign = 'border=20&shohin_kbn=2';
95
- for (i = 0; i < campaign_params_list.length; i++) {
96
- param_campaign = param_campaign + '&shohin_cd=' + campaign_params_list[i].shohin_cd;
97
- }
58
+ }
98
-
99
- // 親クラスのインスタンスを生成
100
- var oya_class = this;
101
-
102
- oya_class.product_search_api(param_campaign).done(function (data) {
103
-
104
-
105
- // 検索結果をリストに格納
106
- for (var i = 0; i < data.length; i++) {
107
- // 検索結果を変数に格納
108
- var shohin_cd = data[i].shohin_cd;
109
- var zaiko_kbn = data[i].zaiko_kbn;
110
59
 
111
- // 検索結果をjsonに格納
112
- var result_json = {
113
- "shohin_cd": shohin_cd,
114
- "zaiko_kbn": zaiko_kbn
60
+ if(product_type_str == 'nomal'){
115
- };
116
-
117
- // 検索結果を格納したjsonをリストに追加
61
+ // 検索結果を格納したjsonをリストに追加
62
+ oya_class.nomal_zaiko_list.push(result_json);
63
+ }else if(product_type_str == 'campaign'){
64
+ // 検索結果を格納したjsonをリストに追加
118
- oya_class.campaign_zaiko_list.push(result_json);
65
+ oya_class.campaign_zaiko_list.push(result_json);
119
- }
66
+ }
120
-
121
- }).fail(function (jqXHR, textStatus, errorThrown) {
67
+
122
- console.log("SearchAPI failed");
123
- });
124
- };
125
-
126
- // APIを使用して商品を検索し結果を返却する関数
127
- this.product_search_api = function(param) {
128
- return $.ajax({
129
- async: false,
130
- url: 'http://www.shiseido.co.jp/sw/products/SWFG070740.seam',
131
- data: param,
132
- dataType: 'jsonp'
133
- });
134
- }
135
-
136
- // ギフトセットの在庫状況を判定する関数
137
- this.Gift_Set_Zaiko_Hantei = function(){
138
- // ギフトセットのJSONリストを取得
139
- var gift_set_list = Gift_Set_json();
140
-
141
- // 親クラスのインスタンスを生成
142
- var oya_class = this;
143
-
144
- for(var i = 0; i < gift_set_list.length; i++){
145
-
146
- // 各商品の判定結果を格納するリストを作成
147
- var products_hantei_list = [];
148
-
149
- for(var j = 0; j < gift_set_list[i].products.length; j++){
150
- // nomal_zaiko_listから判定対象の商品を抽出
151
- var nomal_product_json = oya_class.nomal_zaiko_list.filter(function(item, index){
152
- if (item.shohin_cd == gift_set_list[i].products[j]) return true;
153
- });
154
-
155
- // campaign_zaiko_listから判定対象の商品を抽出
156
- var campaign_product_json = oya_class.campaign_zaiko_list.filter(function(item, index){
157
- if (item.shohin_cd == gift_set_list[i].products[j]) return true;
158
- });
159
-
160
- //console.log(oya_class.nomal_zaiko_list.length);
161
-
162
- if(nomal_product_json.length == 0){
163
- // 判定結果を商品ごとの判定リストに格納
164
- //products_hantei_list.push(campaign_product_json[0].zaiko_kbn);
165
- }else if(campaign_product_json.length == 0){
166
- // 判定結果を商品ごとの判定リストに格納
167
- //products_hantei_list.push(nomal_product_json[0].zaiko_kbn);
168
68
  }
169
-
69
+            console.log(oya_class.campaign_zaiko_list); ← ここは問題ない
170
70
  }
71
+ })
72
+        console.log(oya_class.campaign_zaiko_list); ← ここでリストが空
73
+ })
74
+ }
171
75
 
172
- // 各商品の在庫区分を判定する定数を定義
173
- const index_0 = products_hantei_list.findIndex(item => item === "0");
174
- const index_1 = products_hantei_list.findIndex(item => item === "1");
175
- const index_2 = products_hantei_list.findIndex(item => item === "2");
176
- const index_9 = products_hantei_list.findIndex(item => item === "9");
177
76
 
178
- // 各商品の在庫状況からセットの在庫状況を判定
179
- if(index_0 != -1 || index_9 != -1){
180
- // セットの在庫状況のJSON
181
- set_zaiko_json = {
182
- "cate_rank": gift_set_list[i].cate_rank,
183
- "zaiko_kbn": 0
184
- }
185
-
186
- // 在庫状況のJSONをリストに格納
187
- gift_set_hantei_list.push(set_zaiko_json);
188
-
189
- } else if(index_0 == -1 && index_9 == -1 && index_2 != -1){
190
- // セットの在庫状況のJSON
191
- set_zaiko_json = {
192
- "cate_rank": gift_set_list[i].cate_rank,
193
- "zaiko_kbn": 2
194
- }
195
-
196
- // 在庫状況のJSONをリストに格納
197
- gift_set_hantei_list.push(set_zaiko_json);
198
- } else if(index_0 == -1 && index_9 == -1 && index_2 == -1 && index_1 != -1){
199
- // セットの在庫状況のJSON
200
- set_zaiko_json = {
201
- "cate_rank": gift_set_list[i].cate_rank,
202
- "zaiko_kbn": 1
203
- }
204
-
205
- // 在庫状況のJSONをリストに格納
206
- oya_class.gift_set_hantei_list.push(set_zaiko_json);
207
- }
208
- }
209
- }
210
- }
211
-
212
-
213
77
  ```
214
78
 
215
79
  ### 試したこと

1

質問内容の明確化

2020/10/29 12:28

投稿

TakeruYamamura
TakeruYamamura

スコア7

title CHANGED
File without changes
body CHANGED
@@ -10,6 +10,9 @@
10
10
 
11
11
  上記の②の関数内ではJSONの連想配列として動いてくれるのですが、関数の外では配列にはなっている(chromeのコンソール上にはArrayと表示されている)ものの、要素を指定して値を参照することができない状態となってしまっています。
12
12
 
13
+ 上記関数の外でも値を参照して抽出するためにはどのように修正すればよろしいでしょうか。
14
+ ご教授のほど、よろしくお願いいたします。
15
+
13
16
  ### 発生している問題・エラーメッセージ
14
17
  chromeのコンソール上の表示内容です。(console.logで出力させたもの)
15
18
  ```