2010-03-03 70 views
5

对于这个令人难以置信的简单问题抱歉,但我仍然对JavaScript比较陌生。将数组转换为逗号分隔文本

我有名字的数组,像

var myArray = ['Hill M','Zhang F','Dong L', 'Wilkinson JS', 'Harris N']; 

我想返回一个字符串,用逗号分隔的名字,而是用“和”最后的两个名字之间,即

'Hill M, Zhang F, Dong L, Wilkinson JS and Harris N' 

什么是最有效的方式来做到这一点的JavaScript?

怎么样,如果我想转的姓名和缩写,即返回

'M Hill, F Zhang, L Dong, JS Wilkinson and N Harris' 

回答

19

Array::slice()选择一个数组的一部分,并返回新的数组。
Array::join()将数组的所有元素连接成一个字符串
String::concat()连接两个或多个字符串。

var myArray = ['Hill M','Zhang F','Dong L', 'Wilkinson JS', 'Harris N']; 

console.log(myArray.slice(0, myArray.length - 1).join(', ').concat(
      ' and ' + myArray[myArray.length - 1])); 

//Hill M, Zhang F, Dong L, Wilkinson JS and Harris N 

要改变它们的顺序:

var myArray = ['Hill M','Zhang F','Dong L', 'Wilkinson JS', 'Harris N']; 

for(var i = 0; i < myArray.length; i++) 
    myArray[i] = myArray[i].replace(/^(\S+)\s+(.+)$/, '$2 $1'); 

console.log(myArray.slice(0, myArray.length - 1).join(', ').concat(
      ' and ' + myArray[myArray.length - 1])); 

//M Hill, F Zhang, L Dong, JS Wilkinson and N Harris 

如果你想知道str.replace(/^(\S+)\s+(.+)$/, '$2 $1');

/^(\S+)\s+(.+)$/是一个字符串匹配正则表达式:

^ #starts with 
\S+ #one or more non whitespace characters, followed by 
\s+ #one or more whitespace characters, followed by 
.+ #one or more characters 

$1$2在t他的替换字符串代表正则表达式中的第一和第二组(括号内的子模式)。

+1

这是很好的,但给予一定的解释,也许? OP说他是js的新手。 – 2010-03-03 10:05:13

+0

非常出色 - 非常感谢。第二部分(反转/转位)只有轻微的问题,例如“Ben Gaied N”这样的名字失败了,但我没有明确地询问这一点,我相信我可以将其解决。 – Tomba 2010-03-03 10:16:59

+1

@Tomba正则表达式当前在第一个空白处交换单词。使用'/(。+)\ s +(\ S +)/'在最后一个空白处交换。 – Amarghosh 2010-03-03 10:20:53

8

使用join的数组中的值相结合。

var myJoinedString = myArray.join(','); 
2
var myArray = ['Hill M','Zhang F','Dong L', 'Wilkinson JS', 'Harris N']; 
var replaced = myArray.map(function(elem) { 
    return elem.replace(/(\S+)\s+(\S+)/, "$2 $1"); 
}); 
var last = replaced.pop() 
var result = replaced.join(", ") + " and " + last; 

alert(result) 
+0

不错,但您可能想用'/^(.*?)\s+(\S+)$'/来表达您的表情 – 2010-03-03 10:11:06

2

试试这个:

if (myArray.length <= 1) { 
    str = myArray.join(); 
} else { 
    str = myArray.slice(0, -1).join(", ") + " and " + myArray[myArray.length-1]; 
} 

并为您的交换部分:

myArray.map(function(val) { return val.split(" ").reverse().join(" "); }) 
相关问题