5 回答

TA貢獻1831條經(jīng)驗 獲得超10個贊
您可以使用 JavaScript 中內(nèi)置的 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 傳播到數(shù)組中,因為 Set 也是一個可迭代對象,并返回房間里的人的數(shù)組。

TA貢獻1808條經(jīng)驗 獲得超4個贊
Set 對象強制其元素的唯一性。您可以這樣使用它:
const?peopleInRoom?=?Array.from(new?Set(messages.map(message?=>?message.user.email)));

TA貢獻1802條經(jīng)驗 獲得超5個贊
關于什么:
const peopleInRoom = messages.map(e => e.user.email && e.user.email);
console.log(peopleInRoom)
給你這個輸出:
["foo@bar.com", "baz@qux.com"]

TA貢獻1966條經(jīng)驗 獲得超4個贊
首先,您可以創(chuàng)建所有電子郵件地址的數(shù)組:
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條經(jīng)驗 獲得超4個贊
如果我理解正確的話,人們有消息,消息有電子郵件地址,OP 會尋找唯一的電子郵件地址集。如果這就是所有可用數(shù)據(jù),那么別無選擇,只能迭代它,檢查每封電子郵件是否已被收集,如果尚未收集,則收集它。
有一些方法可以通過在庫代碼中執(zhí)行此操作來隱藏此工作。最高級別的實用程序可能是lodash 的 _.uniqueBy,但工作必須以某種方式完成。
添加回答
舉報