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"]