📌  相关文章
📜  给定:一个包含名称散列的数组 返回:一个字符串,格式为用逗号分隔的名称列表,最后两个名称除外,后者应由 & 号分隔. (1)

📅  最后修改于: 2023-12-03 15:41:17.958000             🧑  作者: Mango

介绍

这个函数的任务是将一个包含名称散列的数组转换成字符串。格式要求是用逗号分隔的名称列表,最后两个名称除外,后者应由 & 号分隔。

这个函数很常用,例如在一个博客网站中,我们需要将不同博客的作者列表展示出来。但是,我们的网页上不可能连续显示所有的作者名字,因此有必要仅显示前几个,然后显示“…和XX位作者”,以减少网页上的冗余内容。

示例

这里给出一个简单的示例:

const authorList = [
  { name: 'Tom' },
  { name: 'Jerry' },
  { name: 'Mike' },
  { name: 'James' },
  { name: 'Maggie' },
];

const result = formatAuthorList(authorList);
console.log(result); // Tom, Jerry, Mike, Maggie & James

策略

首先,我们按照名称将作者名字进行排序。排序显然可以很容易地使用JavaScript 中的 sort() 函数完成。

其次,我们将前几个作者的名字用逗号分隔插入到最后一个作者之前。最后,我们将最后两个作者的名字用 & 插入到最后一个逗号之后,即可得到最终字符串。

代码

下面是函数的完整代码 :

function formatAuthorList(authorList) {
  const numAuthors = authorList.length;

  if (numAuthors === 0) {
    return '';
  } else if (numAuthors === 1) {
    return authorList[0].name;
  } else if (numAuthors === 2) {
    return `${authorList[0].name} & ${authorList[1].name}`;
  } else {
    const clonedList = authorList.slice();

    clonedList.sort((a, b) => (a.name > b.name ? 1 : -1));

    const lastAuthor = clonedList.pop();
    const secondToLastAuthor = clonedList.pop();
    const remainingAuthors = clonedList.map((author) => author.name);

    return `${remainingAuthors.join(', ')}${remainingAuthors.length > 0 ? ',' : ''} ${secondToLastAuthor.name} & ${lastAuthor.name}`;
  }
}

注:在该代码片段中,我们使用了ES6模板字面量语法。此外,我们需要使用 & 而不是 & ,以在Markdown格式中获得正确的显示效果。