5 回答
TA貢獻1831條經驗 獲得超10個贊
您可以使用 JavaScript 中內置的 Set 對象。設置對象實際上保留了不同的原始值。
const messages = [
{
text: 'foo',
user: { email: '[email protected]', password: 'foo' }
},
{
text: 'baz',
user: { email: '[email protected]', 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)
給你這個輸出:
["[email protected]", "[email protected]"]
TA貢獻1966條經驗 獲得超4個贊
首先,您可以創建所有電子郵件地址的數組:
const data = [
? ?{
? ? ?text: 'foo',
? ? ?user: { email: '[email protected]', password: 'foo' }
? ?},
? ?{
? ? ?text: 'baz',
? ? ?user: { email: '[email protected]', 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,但工作必須以某種方式完成。
添加回答
舉報
