5 回答
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 也是一个可迭代对象,并返回房间里的人的数组。
TA贡献1808条经验 获得超4个赞
Set 对象强制其元素的唯一性。您可以这样使用它:
const peopleInRoom = Array.from(new Set(messages.map(message => message.user.email)));
TA贡献1802条经验 获得超5个赞
关于什么:
const peopleInRoom = messages.map(e => e.user.email && e.user.email);
console.log(peopleInRoom)
给你这个输出:
["foo@bar.com", "baz@qux.com"]
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);
TA贡献1816条经验 获得超4个赞
如果我理解正确的话,人们有消息,消息有电子邮件地址,OP 会寻找唯一的电子邮件地址集。如果这就是所有可用数据,那么别无选择,只能迭代它,检查每封电子邮件是否已被收集,如果尚未收集,则收集它。
有一些方法可以通过在库代码中执行此操作来隐藏此工作。最高级别的实用程序可能是lodash 的 _.uniqueBy,但工作必须以某种方式完成。
添加回答
举报