为了账号安全,请及时绑定邮箱和手机立即绑定

简化嵌套 for 循环

简化嵌套 for 循环

白衣非少年 2023-08-10 11:01:10
我有这个代码: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' }   }]对象都是消息。我想从每条消息中获取所有唯一电子邮件的数组
查看完整描述

5 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您可以使用 JavaScript 中内置的 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 传播到数组中,因为 Set 也是一个可迭代对象,并返回房间里的人的数组。


查看完整回答
反对 回复 2023-08-10
?
炎炎设计

TA贡献1808条经验 获得超4个赞

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

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



查看完整回答
反对 回复 2023-08-10
?
12345678_0001

TA贡献1802条经验 获得超5个赞

关于什么:


const peopleInRoom = messages.map(e => e.user.email && e.user.email);

console.log(peopleInRoom)

给你这个输出:


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


查看完整回答
反对 回复 2023-08-10
?
慕标5832272

TA贡献1966条经验 获得超4个赞

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


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);

查看完整回答
反对 回复 2023-08-10
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

如果我理解正确的话,人们有消息,消息有电子邮件地址,OP 会寻找唯一的电子邮件地址集。如果这就是所有可用数据,那么别无选择,只能迭代它,检查每封电子邮件是否已被收集,如果尚未收集,则收集它。

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


查看完整回答
反对 回复 2023-08-10
  • 5 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信