Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有更好/优雅的方法将JavaScript分割值分配给变量?_Javascript_Split - Fatal编程技术网

是否有更好/优雅的方法将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快了好几倍……这纯粹是学术性的:)