将数组转换为逗号分隔的文本

时间:2010-03-03 09:56:13

标签: javascript arrays string

为这个非常简单的问题道歉,但我仍然是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'

4 个答案:

答案 0 :(得分: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代表正则表达式中的第1组和第2组(括在括号中的子模式)。

答案 1 :(得分:8)

使用 join 组合数组中的值。

var myJoinedString = myArray.join(',');

答案 2 :(得分: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)

答案 3 :(得分: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(" "); })