简化嵌套 for 循环

我有这个代码:


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>

  ))

基本上我试图获取所有独特的电子邮件并显示它们。


是否有更短、更有效的方法(也许是一些 ES6 功能)来编写相同的代码?似乎代码比需要的太多了。


我查看了这个答案:How to get different value from an array ofobjects in JavaScript?


编辑:上面的代码没有达到我想要的效果。


我的数据如下所示:


[

   {

     text: 'foo',

     user: { email: 'foo@bar.com', password: 'foo' }

   },

   {

     text: 'baz',

     user: { email: 'baz@qux.com', password: 'baz' }

   }

]

对象都是消息。我想从每条消息中获取所有唯一电子邮件的数组


白衣非少年
浏览 137回答 5
5回答

慕哥6287543

您可以使用 JavaScript 中内置的 Set 对象。设置对象实际上保留了不同的原始值。const messages = [&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp;text: 'foo',&nbsp; &nbsp; &nbsp;user: { email: 'foo@bar.com', password: 'foo' }&nbsp; &nbsp;},&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp;text: 'baz',&nbsp; &nbsp; &nbsp;user: { email: 'baz@qux.com', password: 'baz' }&nbsp; &nbsp;}]const peopleInRoom = [...new Set(messages.map(message => message.user.email))];它实际上从每条消息中提取电子邮件,然后将其传递给 Set 对象,该对象仅保留唯一的电子邮件集。之后,它将将该 Set 传播到数组中,因为 Set 也是一个可迭代对象,并返回房间里的人的数组。

炎炎设计

Set 对象强制其元素的唯一性。您可以这样使用它:const peopleInRoom = Array.from(new Set(messages.map(message => message.user.email)));

12345678_0001

关于什么:const peopleInRoom = messages.map(e => e.user.email && e.user.email);console.log(peopleInRoom)给你这个输出:["foo@bar.com", "baz@qux.com"]

慕标5832272

首先,您可以创建所有电子邮件地址的数组: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);

繁华开满天机

如果我理解正确的话,人们有消息,消息有电子邮件地址,OP 会寻找唯一的电子邮件地址集。如果这就是所有可用数据,那么别无选择,只能迭代它,检查每封电子邮件是否已被收集,如果尚未收集,则收集它。有一些方法可以通过在库代码中执行此操作来隐藏此工作。最高级别的实用程序可能是lodash 的 _.uniqueBy,但工作必须以某种方式完成。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript