ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript 文字列分解に関する質問_javascript スキル

JavaScript 文字列分解に関する質問_javascript スキル

WBOY
リリース: 2016-05-16 18:03:59
オリジナル
1355 人が閲覧しました

ある企業に面接に行きました(社名は言いませんが、この問題集は今でも使われるかもしれません)現場で30分で一連の質問をしたのですが、そのうちの1つが次のようなものでした。

js で関数を記述する必要があります。次の形式の受信 URL 文字列に対して、対応するオブジェクトを返します。
例:
文字列 a='?name=zhiyelee&blog=www.tsnrose.com';
が返された場合、b={'name':'zhiyelee','blog':'www .tsnrose.com'}


その時は時間が比較的短かったため、実装にいくつかの問題があり、帰ってから考えて次のようにまとめました。 >正規表現Expressionを使う方法と文字列のsplit関数を使う方法の2つを考えました。

1. 正規表現処理を使用する
最初に考えたのは、これがより難しく、最も簡単に作成できるかどうかです。この方法は、文字列関数を直接使用するよりも効率が低くなります。以下でこの効率を検証します~
このメソッドのアイデアは非常に単純です。正規表現を使用して毎回 '***=###' の文字列と一致し、ループして最後に削除します。モール。
コードは次のとおりです

コードをコピーします コードは次のとおりです:
var getNRReg = function(str) {
var res = {};
var reg = /(w )=(w )/g;
while ((a = reg.exec(str))
res[1]] = a[2];
}
return
};

2.
の処理も従来通り比較的簡単ですが、正規表現を使うよりも書くのが確実に面倒です。
私のアイデアは、最初に '&' を使用して元の文字列を複数の文字列に分割し、各文字列のスタイルは '***=###' のようなものにしてから、文字列に split('=') を適用することです。 。 (このメソッドは正規表現を使用しません。もちろん通常の Split(/&|=/) を使用できます。
コードは次のとおりです

コードをコピー コードは次のとおりです。
var getNRSplit = function(str) {
var temp, res = {},
i, str = str.slice(1 );
temp = str.split('&');
for (i = 0; i ret = temp[ i].split('=' );
res[ret[0]] = ret[1]
}


効率この 2 つの方法の問題点
正規表現の効率が少し低いことはよく知られているので、最初は最初の解決策の効率が 2 番目の解決策の効率よりも低いはずだと思い、測定してみました。それ以外の場合:
1,000,000 回の実行に時間がかかる 状況:
getNRReg の実行には 4399 ミリ秒かかります
getNRSplit の実行には 6116 ミリ秒かかります


完全なソース コードを表示します:
jsfiddle
、自分でテストできます~
追記:

最後に、Sina Weibo 2011-06-15 からのフロント用の筆記テスト質問を添付します。 -北京ポスト情報会議での終了位置: 正規表現を使用して、特定の文字に隣接する同一の文字を削除します。たとえば、文字列「fdaffdaaklfjk」は、処理後に「fdafdakljk」になります。


私の答えについては、
jsfiddle
を参照してください。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート