【问题标题】:How to join array elements into string with commas & ampersand?如何使用逗号和 & 符号将数组元素加入字符串?
【发布时间】:2018-10-20 23:01:07
【问题描述】:

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

例如

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 函数映射对象数组的值,并使用 slice 提取数组的最后两个值,然后使用 toString 将其转换为字符串,然后使用 split("&") 添加最后两个元素之间的&符号,但我没有按照预期得到输出。

代码:

function list(names){
   let result = names.map(value => value.name);
   return result.slice(-2).toString().split('&');
}

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

【问题讨论】:

标签: javascript arrays string function formatting


【解决方案1】:

这有点棘手,因为您必须首先将列表中的最终名称与其余名称分开,然后将 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'

请注意,输入不是 names 的数组 - 它是稍后需要映射到 names 的对象数组,因此您可以更准确地命名变量并给出list people(或类似的东西)的参数,而不是 names

【讨论】:

    【解决方案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);

    【讨论】:

    • 感谢@kfedorov91 的回答。但是 reult.pop() 做什么?它会从数组中删除所有元素吗?
    • @Riya 是的,result.pop() 从数组中删除最后一项。
    【解决方案3】:

    这里只有两个条件输入代码:

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

    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'} ]));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多