2015-02-07 60 views
1

我在JavaScript中有1个字符串变量,它包含如下3个逗号分隔值:获取所有的逗号分隔字符串值在Javascript

var session = "[email protected],123456,f_id=8"; 

我想在3个不同的变量,所有上述3个逗号分隔值。到目前为止,我所取得的成果是在elem2变量中获取最后一个逗号分隔值,并在elem1变量中获得其他两个逗号分隔值1st和2nd。

var elem1 = session.split(","); 

var elem2 = elem1.pop(); 

document.write("elem1 = "+elem1+"<br/>elem2 = "+elem2); 

所以我的计划是行不通的,因为我想罚款,请我需要快速有效的解决方案,使我有另一个变量elem3,我会得到以下在我的浏览器输出:

elem1 = [email protected] 
elem2 = 123456 
elem3 = f_id=8 
+0

可以等待ES6,可以做[解构分配](HTTPS://developer.mozilla。 org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)如下:'var [email,number,id] = session.split(“,”)' – Grundy 2015-02-07 09:23:07

回答

5

你可以请尝试以下操作:

// Initially, we split are comma separated string value on commas. 
// In the values an array of these values is stored. 
var values = session.split(","); 
// Then we get each value based on it's position in the array. 
var email = values[0]; 
var number = values[1]; 
var id = values[2]; 

作为一个方面说明,我建议您为上述变量使用有意义的名称。名称为elem1,elem2elem3有点含糊,在将来的这些命名中甚至可能会让你不知所措,更不用说其他读者了。

+0

非常感谢。你是一个生活品味它的作品。 – 2015-02-07 09:22:51

+0

@JohnSmith欢迎你!我很高兴我的帮助。 – Christos 2015-02-07 09:23:12

+0

只是好奇地问我们可以让这个程序是通用的,我的意思是任何数量的变量它的工作原理? – 2015-02-07 09:24:09

0

您还可以将会话数据存储在JavaScript Object中。下面遍历每个拆分字符串并将其添加到一个对象。

var myData = {}; 

// ... 

for(var i = 0, x = session.split(","); i < x.length; i++) { 
    switch(i) { 
     case 0: myData.email = x[i]; break; 
     case 1: myData.number = x[i]; break; 
     case 2: myData.f_id = x[i]; break; 
    } 
} 

如果你正在处理多个数据值,最好是创建一个对象数组,如下所示。

依此类推。这是JSON Notation的一种形式。输出看起来像这样:

[ 
    { 
     email: "[email protected]", 
     number: "123456", 
     f_id: "f_id=8" 
    }, 
    { 
     // Another session, etc. 
    } 
] 
0

你也可以使用string.replace和一个回调作为参数。非常灵活!

检查这个以了解更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

为了您的用例,你可能会结束:

function writeParts(match, email, number, id, offset, string) { 
    document.write("email = "+email+"<br/>number = "+number); 
} 
// match not-comma followed by a comma (three times) 
session.replace(/([^,]+),([^,]+),([^,]+)/, writeParts);