【问题标题】:How to add comma between array items?如何在数组项之间添加逗号?
【发布时间】:2017-08-07 12:09:09
【问题描述】:

使用 map 函数打印所有值时,如何在值之间添加逗号? (使用 React,这就是我拥有密钥等的原因。)

{ cars.map(car => {
    return(
      <p key={car.id}>{car.title} ,</p>
    );
}); }

这就是我想要的结果,最后一个数组项的末尾没有逗号:

Audi, Nissan, Mazda, Toyota

我应该这样做吗?

{ cars.map((car, index) => {
  const separator = ", ";
  if(index === car.length - 1) {
     return(
       <p key={car.id}>{car.title} + separator </p>
     );
  }
}); 
}

【问题讨论】:

标签: javascript


【解决方案1】:

您可以通过使用传递的索引参数知道对map的回调的哪个调用是最后一个:

{cars.map((car, index) => {
    return(
        <p key={car.id}>{car.title} {index < cars.length - 1 ? ", " : ""}</p>
    );
})}

但请注意,p 通常是一个块元素,因此汽车将被堆叠而不是内联显示,它们之间有空格(和逗号)。我会改用span(尽管如果你愿意,你可以将p标记为inline)。我在下面使用了span

您还可以使用简洁的箭头函数,而不是带有函数体的冗长函数:

{cars.map((car, index) =>
    <span key={car.id}>{car.title} {index < cars.length - 1 ? ", " : ""}</span>
)}

活生生的例子:

const cars = [
    {id: 1, title: "Ford"},
    {id: 2, title: "Toyota"},
    {id: 3, title: "Lexus"},
];

ReactDOM.render(
    <div>{cars.map((car, index) =>
        <span key={car.id}>{car.title}{index < cars.length - 1 ? ", " : ""}</span>)
    }</div>,
    document.getElementById("root")
);
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

在某处的评论中,您询问如何使空间不中断(尽管我认为这可能是因为您使用 inline-blockp 元素,因此没有呈现正常空间)。为此,只需将", " 替换为上面的",\u00A0"

const cars = [
    {id: 1, title: "Ford"},
    {id: 2, title: "Toyota"},
    {id: 3, title: "Lexus"},
];

ReactDOM.render(
    <div>{cars.map((car, index) =>
        <span key={car.id}>{car.title}{index < cars.length - 1 ? ",\u00A0" : ""}</span>)
    }</div>,
    document.getElementById("root")
);
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

【讨论】:

  • 为什么要为, 提供不间断的空间?
  • @HaroenViaene - 这是一个非常好的问题。 :-) 我认为在某处OP要求它不破坏的地方有一条已删除的评论,我认为因为他们使用的是p,而我在p上莫名其妙地使用了inline-block使事物出现在一行中...并且inline-block 元素之间的正常空格不会被渲染。 (我应该使用inline)。评论不见了,但我一定有一些理由这样做(以及制作this comment)。但这真的很奇怪,我已经修好了,谢谢!
【解决方案2】:

与其使您的标记复杂化并在段落之间添加 TextNode,不如使用 CSS。它并不总是必须是代码。

/* just making the paragraphs inline */
div > p { display: inline-block; }

/* appending the commas */
div > p:after { content: ", " }

/* removing it for the last index */
div > p:last-of-type:after { content: "" }
<div>
  <p>Audi</p>
  <p>Nissan</p>
  <p>Mazda</p>
  <p>Toyota</p>
</div>

<div>
  <p>Audi</p>
  <p>Nissan</p>
  <p>Mazda</p>
  <p>Toyota</p>
</div>

【讨论】:

  • 哈!这(有或没有inline-block)是OP应该做的,如果伪元素是一个选项(例如,逗号是否真的在内容中并不重要——用于复制和粘贴等)。
  • inline-block 并不重要。我只是想得到问题中显示的结果,Audi, Nissan, Mazda, Toyota 在一行中,并使用标记中的段落来完成。这就是display: inline-block 的全部用途,它与:after { content: ", " } 无关。
  • @userden:要使用上述方法获得您正在寻找的不间断空间,一个选项是content: ",\00A0"
猜你喜欢
  • 2023-04-05
  • 2018-01-12
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 2016-07-05
相关资源
最近更新 更多