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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

2回答

217閲覧

JavaScript データ抜き出し

hachii

総合スコア12

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

1クリップ

投稿2017/12/25 14:05

編集2017/12/26 11:48

###実現したいこと
文字列の中から,"指定した文字"を見つけ出し任意の情報を抽出.

###該当のソースコード

JavaScript

1 <script type="text/javascript"> 2 function Info(x,y){ 3 this.x = +x; 4 this.y = +y; 5 } 6 7 var str = "6f72696f6e" , infoList = []; 8 for(var i=0,len=str.length,x,y ; i<len ; ++i){ 9 if(str[i] === "6" && str[i+1] === "f"){ 10 x = str[++i+1]; 11 y = str[++i+1]; 12 infoList.push = (newInfo(x,y)); 13 console.log(x); 14 console.log(y); 15 } 16 }

Javascript

1 <script type="text/javascript"> 2 function Info(x,y){ 3 this.x = +x; 4 this.y = +y; 5 } 6 7 var lastIndex = -1; 8 var str = "6f72696f6e" , infoList = []; 9 10 while(true){ 11 var x,y; 12 var nextIndex = str.indexOf("6f",lastIndex+1); 13 if(nextIndex === -1){ 14 break; 15 }else{ 16 x = str[nextIndex+2]; 17 y = str[nextIndex+3]; 18 infoList.push = (newInfo(x,y)); 19 console.log(x); 20 console.log(y); 21 lastIndx = nextIndex; 22 } 23 }

###質問したいこと
strの中身が何百万になるとしたら,どちらの方法が良いのでしょうか?
それともほかに何か方法がありますでしょうか.
(指定する文字は6fだけではありません.)

以上よろしくお願いします.

###補足情報(言語/FW/ツール等のバージョンなど)
言語 JavaScriptのみ

###追記・修正
12/26 20:47 SyntaxError修正

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

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

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

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

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

think49

2017/12/25 14:49

コード上に SyntaxError があるので、修正して下さい。また、「どちらの方法が良い」とありますが、判断基準は実行速度でしょうか。実行速度だとしたらベンチマークをとってみてはいかがでしょうか。
hachii

2017/12/26 11:49

エラーの修正いたしました.実行速度以外に比較する点が思いつきませんでした.ベンチマーク案、ありがとうございます.
guest

回答2

0

ベストアンサー

RegExp.prototype.exec

「良いコード」の判断基準が分かりませんが、RegExp.prototype.exec を利用する方法も有ります。

JavaScript

1'use strict'; 2function Info (x, y) { 3 this.x = +x; 4 this.y = +y; 5} 6 7function fetchCharTypeExec (string) { 8 var infoList = [], reg = /6f([\da-fA-F])([\da-fA-F])/g, result; 9 10 while (result = reg.exec(string)) { 11 infoList.push(new Info(result[1], result[2])); 12 } 13 14 return infoList; 15} 16 17console.log(fetchCharTypeExec('6f72696f6e')); // [Info{"x":7,"y":2},Info{"x":6,"y":NaN}]

String.prototype.indexOf

String.prototype.indexOf を利用するなら、私は次のコードを書きます。

JavaScript

1'use strict'; 2function Info (x, y) { 3 this.x = +x; 4 this.y = +y; 5} 6 7function fetchCharTypeIndexOf (string) { 8 var infoList = [], index, fromIndex = 0; 9 10 while (index = string.indexOf('6f', fromIndex), index !== -1) { 11 infoList.push(new Info(string[index + 2], string[index + 3])); 12 fromIndex += 4; 13 } 14 15 return infoList; 16} 17 18console.log(fetchCharTypeIndexOf('6f72696f6e')); // [Info{"x":7,"y":2},Info{"x":6,"y":NaN}]

ベンチマーク

もし、実行速度を気にしての比較なら、ベンチマークをとりましょう。
JavaScriptの実行速度はWebブラウザ、バージョン、PCのスペック等、速度に実行される要素は複数あるので、質問者さんの環境で実行しなければ意味がないと私は思います。

Re: hachii さん

投稿2017/12/25 15:25

think49

総合スコア18162

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

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

hachii

2017/12/26 11:51

提示していただいたコード,まだ理解しきれていませんので調べながらやっていきたいと思います.(動作は確認取れました!)ベンチマーク案,ありがとうございます.
guest

0

どちらが良いかは、データソースを実際に処理して時間を計測して判断されれば良いかと思います。
なお、そのデータ量であればwebworkerを利用してスレッド処理をするとパフォーマンス上がるかと思います。

投稿2017/12/25 14:22

編集2017/12/25 14:23
oligin

総合スコア138

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

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

hachii

2017/12/26 11:53

webworker,初めて知りました.Chromeを使用しているので試したところ,ローカルでは動作しないということがわかりました.しかし,自分では絶対にたどり着かないであろうものを教えてくださり,とても感謝しています.時間に余裕ができたらworkerの使用も考えたいと思います.ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問