質問編集履歴

1

補足

2017/04/13 03:14

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -15,3 +15,329 @@
15
15
 
16
16
 
17
17
  よろしくお願いします。
18
+
19
+
20
+
21
+ goufさんの回答を参考に作ってみました。
22
+
23
+
24
+
25
+ ```html
26
+
27
+ <!DOCTYPE html>
28
+
29
+ <html lang="ja">
30
+
31
+ <head>
32
+
33
+ <meta charset="UTF-8">
34
+
35
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
36
+
37
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
38
+
39
+ <script src="http://code.jquery.com/jquery-latest.js"></script>
40
+
41
+ <title>pasword generator</title>
42
+
43
+ </head>
44
+
45
+ <style>
46
+
47
+ textarea {
48
+
49
+ outline: none;
50
+
51
+ border: 1px solid #aaa;
52
+
53
+ -webkit-transition: all .3s;
54
+
55
+ transition: all .3s;
56
+
57
+ }
58
+
59
+ textarea:focus {
60
+
61
+ box-shadow: 0 0 7px #1abc9c;
62
+
63
+ border: 1px solid #1abc9c;
64
+
65
+ }
66
+
67
+ .button {
68
+
69
+ width: 100px;
70
+
71
+ font-size: 20px;
72
+
73
+ background-color: #333;
74
+
75
+ border: 2px solid #333;
76
+
77
+ color: #fff;
78
+
79
+ line-height: 50px;
80
+
81
+ transition: all .3s;
82
+
83
+ }
84
+
85
+ .button:hover {
86
+
87
+ background-color: #fff;
88
+
89
+ border-color: #1abc9c;
90
+
91
+ color: #1abc9c;
92
+
93
+ }
94
+
95
+ .box,.box2 {
96
+
97
+ display: none;
98
+
99
+ }
100
+
101
+ </style>
102
+
103
+ <body>
104
+
105
+ <div><textarea id="input" cols="100" rows="40"></textarea></div>
106
+
107
+ <div><input class="button" type="button" value="変 換"></div>
108
+
109
+ <textarea id="output" cols="100" rows="40"></textarea>
110
+
111
+ <textarea id="output2" cols="100" rows="40"></textarea>
112
+
113
+ <div class="box"></div>
114
+
115
+ <div class="box2"></div>
116
+
117
+
118
+
119
+ <script>
120
+
121
+ (function(){
122
+
123
+ 'use strict';
124
+
125
+ function firstThreeChars(elm) {
126
+
127
+ // 配列をmap で回して index 指定値として利用
128
+
129
+ // 文字列から最初の13字を抜き出す
130
+
131
+ return Array.apply(null, Array(13)).map(function(_, i) {
132
+
133
+ return elm[i];
134
+
135
+ }).join('');
136
+
137
+ }
138
+
139
+
140
+
141
+ function rejectDup(elements) {
142
+
143
+ // もともとの文字列に加えて 重複しているか否かを判定できるよう設定値を追加
144
+
145
+ var obj = elements.map(function(elm) {
146
+
147
+ return {
148
+
149
+ str: elm,
150
+
151
+ firstThreeChars: firstThreeChars(elm),
152
+
153
+ duplicated: false
154
+
155
+ }
156
+
157
+ });
158
+
159
+ // 素朴に2重ループで重複検出
160
+
161
+ for(var i = 0; i < obj.length; i++) {
162
+
163
+ for(var j = 0; j < obj.length; j++) {
164
+
165
+ var duplicated = (obj[i].firstThreeChars == obj[j].firstThreeChars);
166
+
167
+ var sameIndex = (i == j);
168
+
169
+ if(!sameIndex && duplicated) {
170
+
171
+ obj[i].duplicated = true
172
+
173
+ }
174
+
175
+ }
176
+
177
+ }
178
+
179
+
180
+
181
+ // 重複していないものだけを結果として返却
182
+
183
+ return obj.reduce(function(ret, elm) {
184
+
185
+ if(elm.duplicated == false) {
186
+
187
+ ret.push(elm.str);
188
+
189
+ }
190
+
191
+ return ret;
192
+
193
+ }, []);
194
+
195
+ }
196
+
197
+
198
+
199
+ function rejectDup2(elements) {
200
+
201
+ // もともとの文字列に加えて 重複しているか否かを判定できるよう設定値を追加
202
+
203
+ var obj = elements.map(function(elm) {
204
+
205
+ return {
206
+
207
+ str: elm,
208
+
209
+ firstThreeChars: firstThreeChars(elm),
210
+
211
+ duplicated: false
212
+
213
+ }
214
+
215
+ });
216
+
217
+ // 素朴に2重ループで重複検出
218
+
219
+ for(var i = 0; i < obj.length; i++) {
220
+
221
+ for(var j = 0; j < obj.length; j++) {
222
+
223
+ var duplicated = (obj[i].firstThreeChars == obj[j].firstThreeChars);
224
+
225
+ var sameIndex = (i == j);
226
+
227
+ if(!sameIndex && duplicated) {
228
+
229
+ obj[i].duplicated = true
230
+
231
+ }
232
+
233
+ }
234
+
235
+ }
236
+
237
+
238
+
239
+ return obj.reduce(function(bad, elm) {
240
+
241
+ if(elm.duplicated == true) {
242
+
243
+ bad.push(elm.str);
244
+
245
+ }
246
+
247
+ return bad;
248
+
249
+ }, []);
250
+
251
+ }
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+ $('.button').click(function(){
260
+
261
+ var str = $('#input').val();
262
+
263
+
264
+
265
+ var result = rejectDup(str.split("\n"));
266
+
267
+ $('.box').text(result);
268
+
269
+ var box = $('.box').text();
270
+
271
+ $('#output').html(box.replace(/\"],/g, '\"],\n'));
272
+
273
+
274
+
275
+ var result2 = rejectDup2(str.split("\n"));
276
+
277
+ $('.box2').text(result2);
278
+
279
+ var box2 = $('.box2').text();
280
+
281
+ $('#output2').html(box2.replace(/\"],/g, '\"],\n'));
282
+
283
+
284
+
285
+ });
286
+
287
+
288
+
289
+ })();
290
+
291
+ </script>
292
+
293
+ </body>
294
+
295
+ </html>
296
+
297
+ ```
298
+
299
+
300
+
301
+ こんな風に、前13文字が重複しているものは右側のテキストエリアに、重複していないものは左側のテキストエリアに表示するようにしたのですが、望んでいるものは、例えば
302
+
303
+ (n =1とします)
304
+
305
+ 1
306
+
307
+ 2
308
+
309
+ 2
310
+
311
+ 2
312
+
313
+ 3
314
+
315
+ 3
316
+
317
+ と入力すれば,
318
+
319
+ 1
320
+
321
+ 2
322
+
323
+ 3
324
+
325
+ となるように重複を除くけど、1つは残すようにしたいのです。
326
+
327
+
328
+
329
+ そして入力するデータは
330
+
331
+ ["A310050015",4,2,"name","subject","room","http://ssss.com=1"],
332
+
333
+ ["A310050015",4,2,"name","subject","room","http://ssss.com=2"]
334
+
335
+ ..
336
+
337
+ のような形式なのですが、左側のコード等が同じなのに、右端のURLの値が僅かに違うので、こういうものを作りたいと思っています。
338
+
339
+ データの1行1行が配列なのでreplace(/\"],/g, '\"],\n')などを使っています。
340
+
341
+
342
+
343
+ アドバイスよろしくお願いします。