我有一个字符串数组,我想将它们显示为逗号分隔的字符串,但为最后一个元素添加"and"。例如
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join(' ,');
输出'Banana, Orange, Apple, Mango'
有没有办法在最后一个单词后面加上and,输出
'Banana, Orange, Apple and Mango'
您可以使用Array.reduce
函数并实现您自己的逻辑,例如:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.reduce(function (p, d, i) {
return p + (i === fruits.length - 1 ? ' and ' : ', ') + d;
});
您可以使用slice和join连接数组的前3个元素,然后添加用'and'连接的最后一个元素。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.slice(0, fruits.length - 1).join(', ');
energy += ' and ' + fruits[fruits.length - 1];
你不能传递一个函数给.join
,不幸的是,所以你需要通过循环迭代并自己加入它:
const array = ['banana', 'apple', 'taco']
let result = array[0]
for (let i = 1; i < array.length; i++) {
if (i < array.length - 1) {
result += ', ' + array[i]
} else {
result += ' and ' + array[i]
}
}
console.log(result)
您可以为此创建一个函数:
// General purpose custom/dynamic join function creator.
function dynamicJoin(fn) {
return function(array) {
let result = array[0]
for (let i = 1; i < array.length; i++) {
const joiner = fn(array[i - 1], array[i], i, array)
result += joiner + array[i]
}
return result
}
}
const joinCommaOrAnd = dynamicJoin(function(a, b, i, arr) {
return (i === arr.length - 1) ? ' and ' : ', '
})
console.log(joinCommaOrAnd(['bread', 'fish', 'butter']))
Function toSentence of underscore。String具有您想要的确切功能。如果你不想要整个图书馆,你可以借toSentence
:
function toSentence(array, separator, lastSeparator, serial) {
separator = separator || ', ';
lastSeparator = lastSeparator || ' and ';
var a = array.slice(),
lastMember = a.pop();
if (array.length > 2 && serial) lastSeparator = separator + lastSeparator;
return a.length ? a.join(separator) + lastSeparator + lastMember : lastMember;
};
你可以试试这个,
var delimiter = ', ';
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join(delimiter);
var index = energy.lastIndexOf(delimiter);
energy = energy.substring(0, index) + ' and ' + energy.substring(index + delimiter.length);
console.log(energy);