是否有更好/优雅的方法将JavaScript分割值分配给变量?
只是感觉可能有更好的方法是否有更好/优雅的方法将JavaScript分割值分配给变量?,javascript,split,Javascript,Split,只是感觉可能有更好的方法 var values = resp.split(':'); var delta = values[0]; var newvalue = values[1]; var admin = values[2]; 我只能想到: var values = resp.split(':'); var delta = values[0], newvalue = values[1], admin = values[2]; 或者像lonesomeday建议的那样: va
var values = resp.split(':');
var delta = values[0]; var newvalue = values[1]; var admin = values[2];
我只能想到:
var values = resp.split(':');
var delta = values[0],
newvalue = values[1],
admin = values[2];
或者像lonesomeday建议的那样:
var values = resp.split(':'),
delta = values[0],
newvalue = values[1],
admin = values[2];
在我看来,最好不要重复
var
关键字。因此:
var values = resp.split(':'),
delta = values[0],
newvalue = values[1],
admin = values[2];
(逗号后是否有换行符,等号是否对齐。)
但是你没什么别的办法来装饰它
除非您愿意使用以下帮助函数做一些愚蠢的事情:
function assignFromArray(vars, vals){
for (var i=0; i<vars.length; i++)
window[vars[i]] = vals[i];
}
assignFromArray(["delta","newValue","admin"], resp.split(":"));
var delta = resp.substring(0, resp.indexOf(':')),
newvalue = resp.substring(resp.indexOf(':') + 1, resp.lastIndexOf(':')),
admin = resp.substring(resp.lastIndexOf(':') + 1, resp.length);
函数assignFromArray(变量、VAL){
for(var i=0;i用于循环
var values = resp.split(':');
for(var i=0; i<values.length; i++) {
var value = values[i];
alert(i =") "+value);
}
var values=resp.split(':');
对于(var i=0;i):
您可以避免使用显式索引,只需对声明进行相应的排序。当然,也可以使用单个var
关键字
更改和扩展更容易,因为您可能希望声明在数组中的出现顺序
var values = resp.split(':');
var delta = values.shift();
var newvalue = values.shift();
var admin = values.shift();
用一句话:
var values = resp.split(':'),
delta = values.shift(),
newvalue = values.shift(),
admin = values.shift();
使用一个漂亮的小assign()函数将值与新对象中的键相关联。然后,返回该对象:
var assign = function(values, keys) {
var i, vmax, kmax, output = {};
for(i=0, vmax=values.length, kmax=keys.length; i<vmax && i<kmax; i++) {
output[keys[i]] = values[i];
}
return output;
};
var result = assign(["bar","beer"], ["foo","free"]);
console.log(result);
// returns { "foo" : "bar", "free" : "beer" } accessed as result.foo and result.free
var assign=函数(值、键){
var i,vmax,kmax,output={};
对于(i=0,vmax=values.length,kmax=keys.length;i要摆脱数组,可以尝试以下方法:
function assignFromArray(vars, vals){
for (var i=0; i<vars.length; i++)
window[vars[i]] = vals[i];
}
assignFromArray(["delta","newValue","admin"], resp.split(":"));
var delta = resp.substring(0, resp.indexOf(':')),
newvalue = resp.substring(resp.indexOf(':') + 1, resp.lastIndexOf(':')),
admin = resp.substring(resp.lastIndexOf(':') + 1, resp.length);
别担心,我不希望得到一个被接受的答案!:)只是想展示另一种看待事物的方式。这叫做[Destructuring assignment][1],它并不特别符合标准。[1]:这很难理解。遗憾的是,它没有完全合规性:(同意,这确实是唯一可以做的改进,尽管我不认为这是OP的意图。注意,您也可能会丢失第二个var
。这不是将newvalue和admin推到全局范围吗?不,请注意,没有;在第一行之后-这意味着您继续声明变量,并且可以忽略每个变量上的var。)行。是的,不确定这是否是OP想要的,但好吧。+1。我认为这是最好的变化,尽管我更喜欢使用建议的单个var
语句。@lonesomeday-在这种情况下,我们知道数组只包含三个值,所以速度(或缺少速度)即使后来扩展到10个或20个值,用户也不会注意到(尽管我认为按相反顺序分配变量并使用.pop()
?)会更快)非常正确。如果您需要将数据提取到二十个不同的变量中,您会遇到更大的问题!我建议将output
设置为可选的第三个参数,以便您可以选择是扩展/更新现有选项还是创建新选项。这将在函数中包含太多的逻辑。为太多?再多一行:如果(!output)output={};
No,就不是太多的“代码”请注意,我来自C背景,所以这些东西是非顺序的,通常是分开的。两者都可以。其他观点总是好的,但如果引入第四个变量,这将无法很好地处理…是的,我确实想到了。唯一的方法是执行resp=resp.substring(resp.indexOf(':'))
在每次作业之后,但是它会变得很混乱。不过,我发现substring
/substr
与indexOf
相结合在过去稍有不同的情况下非常有用,我不想求助于RegExp
。而且,这是目前为止最快的方法…拆分实际上是sl现在,我假设是因为它在处理之前将字符串转换为RegExp。要适应字符串中的更多值,您不需要每次都不断更改resp
:。indexOf()
接受一个可选的第二个参数,该参数是开始搜索的索引,因此添加一个临时变量来存储索引(这也可以避免您当前重复调用.indexOf()
来查找相同的值),然后下一个调用可以是resp.indexOf(“:”,prevIndex+1)
。至于.split()
的速度-除非我注意到页面滞后,否则我不会担心,因为.split()
-基于代码的代码要清晰得多。将字符串拆分为3(或10或20)段并不明显慢。哦,是的,我忘记了第二个参数。不,拆分也不明显慢,尽管indexOf快了好几倍……这纯粹是学术性的:)