为这个非常简单的问题道歉,但我仍然是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'
答案 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(" "); })