Javascript:在JavaScript中使用&符号分割字串

时间:2018-10-20 23:01:08

标签: javascript

在我的程序中,给出了一系列名称的哈希。我想返回一个字符串,该字符串的格式设置为用逗号分隔的名称列表,但最后两个名称除外,后者应使用&分隔。

例如

list([{ name: 'Bart' }, { name: 'Lisa' }, { name: 'Maggie' }]);
// returns 'Bart, Lisa & Maggie'

list([{ name: 'Bart' }, { name: 'Lisa' }]);
// returns 'Bart & Lisa'

list([{ name: 'Bart' }]);
// returns 'Bart'

list([]);
// returns ''

为此,我正在使用map函数映射对象数组的值,并使用切片来提取数组的最后两个值,然后使用toString将其转换为字符串,然后使用{{1 }}在最后两个元素之间添加&符,但是我没有得到期望的输出。

代码:

split("&")

3 个答案:

答案 0 :(得分:3)

这有点棘手,因为您必须先从列表中的其余部分中分离出列表中的最终名称,然后join。如果剩下的是 ,则将连接的字符串与' and '连接,否则仅返回最终名称:

function list(people){
  const names = people.map(({ name }) => name);
  const finalName = names.pop();
  return names.length
  ? names.join(', ') + ' & ' + finalName
  : finalName;
}

console.log(list([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ])) // returns 'Bart, Lisa & Maggie'
console.log(list([ {name: 'Bart'}, {name: 'Lisa'} ])) // returns 'Bart & Lisa'
console.log(list([ {name: 'Bart'} ])) // returns 'Bart'

请注意,输入内容不是name的数组-它是一个对象数组,以后需要映射到names,因此您可以命名变量更精确地给list赋予people(或类似的东西)而不是names的参数。

答案 1 :(得分:2)

您可以pop数组中的最后一项,用逗号join其余的项,然后在最后的项后面附加一个&符号。更新的代码:

function list(names) {
   if (names.length === 0) return '';
   if (names.length === 1) return names[0].name; 
   let result = names.map(value => value.name);
   let lastName = result.pop();
   return result.join(', ') + ' & ' + lastName;
}

let string = list([{name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'}]);

console.log(string);

答案 2 :(得分:0)

这里仅输入代码两个条件:

  • 如果列表中只有一个名字
  • 或列表中有多个名字

function myCustomList(persons){
  names = persons.map(({ name }) => name);
  lastName = names.pop();
  return names.length ? names.join(', ') + ' & ' + lastName : lastName;
}
//watch your answer in alert box

alert(myCustomList([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ]));