回答編集履歴

5

テキスト修正

2018/02/12 10:07

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- 他の回答を読むと、ES6の仕様および実装によっては、何らかの順序があるようですが、
75
+ 他の回答を読むと、今現在の主要なjavaScript実装によっては、何らかの順序があるようですが、
76
76
 
77
77
  今のところは、以下の回答に従うのがよさそうです。
78
78
 

4

テキスト修正

2018/02/12 10:07

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -98,9 +98,9 @@
98
98
 
99
99
  `for..in`で、オブジェクトのプロパティを何らかの順序で取り出せることを期待するのは拙い、
100
100
 
101
- ということを、上記で回答しましたが、それはそれとして、`json[1]` で要素が取れるので
101
+ ということを、上記で回答しましたが、それはそれとして、`json[1]` で要素が取れる、つまり、
102
102
 
103
- あれば、以下のような修正をすると、意図通り動くかもしれません。
103
+ jsonのプロパティが整数なのであれば、以下のような修正をすると、意図通り動くかもしれません。
104
104
 
105
105
 
106
106
 
@@ -151,3 +151,9 @@
151
151
 
152
152
 
153
153
  ```
154
+
155
+
156
+
157
+ ただし、 json のプロパティが 0,1,2,3 ・・・ のように 0 始まりで、かつ抜けている数字が
158
+
159
+ ないことが前提になります。

3

回答追加

2018/02/12 09:35

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  ---
46
46
 
47
- 補足
47
+ **補足1**
48
48
 
49
49
 
50
50
 
@@ -87,3 +87,67 @@
87
87
  ** ・・・ **
88
88
 
89
89
  ** Conclusion: Even in ES2015 you shouldn't rely on the property order of normal objects in Javascript. It is prone to errors. Use Map instead. **
90
+
91
+
92
+
93
+ ---
94
+
95
+ **補足2**
96
+
97
+
98
+
99
+ `for..in`で、オブジェクトのプロパティを何らかの順序で取り出せることを期待するのは拙い、
100
+
101
+ ということを、上記で回答しましたが、それはそれとして、`json[1]` で要素が取れるので
102
+
103
+ あれば、以下のような修正をすると、意図通り動くかもしれません。
104
+
105
+
106
+
107
+ 修正前
108
+
109
+ ```javascript
110
+
111
+ //モーダル内の画像クリック時の処理
112
+
113
+ for(var i in json){
114
+
115
+ $("#samplegazo").on('click','.test',function(){
116
+
117
+ //ここにクリックした画像のデータ(codeとname)を取得する処理を書きたいです。
118
+
119
+ $(':hidden[name="hiddenCode"]').val(json[i].code);
120
+
121
+ $('#nameselect').val(json[i].name);
122
+
123
+ });
124
+
125
+ }
126
+
127
+ ```
128
+
129
+
130
+
131
+ 修正後
132
+
133
+ ```javascript
134
+
135
+
136
+
137
+ $("#samplegazo .test").each(function(index, li) {
138
+
139
+ $(li).on('click', function() {
140
+
141
+ //ここにクリックした画像のデータ(codeとname)を取得する処理を書きたいです。
142
+
143
+ $(':hidden[name="hiddenCode"]').val(json[index].code);
144
+
145
+ $('#nameselect').val(json[index].name);
146
+
147
+ });
148
+
149
+ });
150
+
151
+
152
+
153
+ ```

2

テキスト修正

2018/02/12 09:18

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -68,4 +68,22 @@
68
68
 
69
69
  上記で、 **unordered** とあるので、`for(var i in json)` で json のプロパティが
70
70
 
71
- 何らかの望ましい順序で取り出せると期待することはできない、といえるでしょう。
71
+ 何らかの望ましい順序で取り出せると期待ないほうがよい、といえるでしょう。
72
+
73
+
74
+
75
+ 他の回答を読むと、ES6の仕様および実装によっては、何らかの順序があるようですが、
76
+
77
+ 今のところは、以下の回答に従うのがよさそうです。
78
+
79
+
80
+
81
+ > ftor answered Jul 6 '16 at 7:38
82
+
83
+  
84
+
85
+ > **Property order in normal Objects is a complex subject in Javascript.**
86
+
87
+ ** ・・・ **
88
+
89
+ ** Conclusion: Even in ES2015 you shouldn't rely on the property order of normal objects in Javascript. It is prone to errors. Use Map instead. **

1

テキスト修正

2018/02/12 08:50

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -39,3 +39,33 @@
39
39
 
40
40
 
41
41
  以上参考になれば幸いです。
42
+
43
+
44
+
45
+ ---
46
+
47
+ 補足
48
+
49
+
50
+
51
+ stackoverflow の以下の質問
52
+
53
+ [https://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order](https://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order)
54
+
55
+
56
+
57
+ の回答で多数の Like がついているものに、ECMAScriptの仕様が以下のように引用されています。
58
+
59
+
60
+
61
+ > 4.3.3 Object
62
+
63
+ >
64
+
65
+ An object is a member of the type Object. **It is an unordered collection of properties** each of which contains a primitive value, object, or function. A function stored in a property of an object is called a method.
66
+
67
+
68
+
69
+ 上記で、 **unordered** とあるので、`for(var i in json)` で json のプロパティが
70
+
71
+ 何らかの望ましい順序で取り出せると期待することはできない、といえるでしょう。