gpt4 book ai didi

javascript - js功能优化

转载 作者:行者123 更新时间:2023-11-30 13:13:59 24 4
gpt4 key购买 nike

我发现自己经常从 JavaScript 中所谓的名称值列表中解析值。

我使用了一个自制的函数来完成这项工作,但我决定尝试使用原型(prototype)属性。它似乎有效,但我发现第二个函数“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');

但是我找不到办法。

最佳答案

我建议将 nvls 序列化和反序列化为对象。一个相当简单的例子是:

function deserialize(nvl) {
var re = /(\w+)=(\w+)/g, matches, props = {};
while (matches = re.exec(nvl)) {
props[matches[1]] = matches[2];
}
return props;
}

function serialize(props) {
var prop, nvl = [];
for (prop in props) {
if (props.hasOwnProperty(prop)) {
nvl.push(prop + '=' + props[prop]);
}
}
return nvl.join(',');
}

现在你的例子变成了:

var props = deserialize('firstName=John,lastName=Smith,department=Sales');
alert(props.firstName); // John
alert(props.surName); // undefined
props.department = 'Research';
alert(props.department); // Research
alert(serialize(props)); // firstName=John,lastName=Smith,department=Research

关于javascript - js功能优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com