Javascript 简化嵌套for循环

Javascript 简化嵌套for循环,javascript,reactjs,performance,for-loop,Javascript,Reactjs,Performance,For Loop,我有以下代码: let peopleInRoom = []; for (let message of messages) { for (let email of message.user.email) { if (!peopleInRoom.includes(email)) { peopleInRoom.push(email); } } } let peopleInRoomElement = peopleInRoom.map(

我有以下代码:

let peopleInRoom = [];
  for (let message of messages) {
    for (let email of message.user.email) {
      if (!peopleInRoom.includes(email)) {
        peopleInRoom.push(email);
      }
    }
  }

  let peopleInRoomElement = peopleInRoom.map(person => (
    <li>{person}</li>
  ))

这些对象都是消息。如果我理解正确,我想从每封邮件中获得一个包含所有唯一电子邮件的数组,人们有邮件,邮件有电子邮件地址,OP会寻找唯一的电子邮件地址集。如果这是所有可用的数据,那么除了迭代之外别无选择,检查每封电子邮件是否已收集,如果尚未收集,则收集

有一些方法可以通过在库代码中执行来隐藏此工作。可能是最高级别的实用程序,但工作必须以某种方式完成。

强制其元素的唯一性。您可以这样使用它:

const peopleInRoom = Array.from(new Set(messages.map(message => message.user.email)));

首先,您可以创建一个包含所有电子邮件地址的数组:

const data = [
   {
     text: 'foo',
     user: { email: 'foo@bar.com', password: 'foo' }
   },
   {
     text: 'baz',
     user: { email: 'baz@qux.com', password: 'baz' }
   }
]

const emailArray = data.map((elem) => {
  return elem.user.email;
}
然后您可以将它们过滤为唯一的:

function onlyUnique(value, index, self) {
  return self.indexOf(value) === index;
}


emailArrayFiltered = emailArray.filter(onlyUnique);

请参见此处,了解ref

您可以使用内置于JavaScript中的Set对象。Set对象实际上保留不同的基元值

const messages = [
   {
     text: 'foo',
     user: { email: 'foo@bar.com', password: 'foo' }
   },
   {
     text: 'baz',
     user: { email: 'baz@qux.com', password: 'baz' }
   }
]

const peopleInRoom = [...new Set(messages.map(message => message.user.email))];
它实际上从每条消息中提取电子邮件,然后将其传递给Set对象,该对象只保留唯一的电子邮件集。之后,它会将该集合扩展到数组中,因为Set也是一个iterable并返回房间中的人员数组。

关于:

const peopleInRoom = messages.map(e => e.user.email && e.user.email);
console.log(peopleInRoom)
为您提供以下输出:

["foo@bar.com", "baz@qux.com"]

你试过一套吗?你好,欢迎来到SO!你已经找到的答案是肯定的,如果你想要一个单行程序,它将在你的情况下工作,只有一个小的修改。如果它不工作-你确定你明白它应该如何工作吗?如果不是,那么您当前的尝试可能更好,只是您没有正确处理数据-
message.user.email
是字符串,而不是数组。
["foo@bar.com", "baz@qux.com"]