私は、いわゆる JavaScript の Name Value Lists から値を頻繁に解析していることに気づきました。
私は自分で作成した関数を使用しましたが、これはかなりうまく機能しましたが、プロトタイプ プロパティを試してみることにしました。うまくいくようですが、2番目の関数「nvlSet」が「醜い」ものだと思います。
あなたはそう思いますか?..もしそうなら、どうすればより「エレガントな」仕事をすることができると思いますか?
if(!String.prototype.nvlGet) {
String.prototype.nvlGet = function(nme,def){
return((rem0=new RegExp('(\\b|,)' + nme + '=([^\\b][^,]*)').exec(this)) ? rem0[2] : def);
}
}
if(!String.prototype.nvlSet) {
String.prototype.nvlSet = function(nme,val){
var re0=new RegExp('(\\b' + nme + '=[^\\b][^,]*)');
if(re0.test(this)) return(this.replace(re0,nme + "=" + val));
re0.compile('(,' + nme + '=[^\\b][^,]*)');
return(this.replace(re0,',' + nme + "=" + val));
}
}
var lst='firstName=John,lastName=Smith,department=Sales';
alert(lst.nvlGet('firstName')); // John
alert(lst.nvlGet('surName','none')); // none
lst=lst.nvlSet('department','Research');
alert(lst.nvlGet('department','unknown')); // Research
alert(lst); // firstName=John,lastName=Smith,department=Research
また、次のような「二重割り当て」は避けたいと思います。
lst=lst.nvlSet('department','Research');
このようなものに:
lst.nvlSet('department','Research');
しかし、私はそれを行う方法を見つけることができませんでした。