我正在創建與 Firestore 的聊天。我想根據另一個陣列對陣列進行排序,該陣列的字串由第一個陣列上的 uid 表示。
首先我有這個狀態和這個ID。
const [allInp, setAllInp] = useState({ searchConv: '' })
const dropId = searchConv
我有這個陣列
const findUser = (ele) => {
if (!ele || !ele.fullName) return false
return ele.fullName.toLowerCase().includes(allInp[dropId].toLowerCase())
}
const myUid = 'ibPlTju8K2d3PlydP6sdm2T4S2L2'
const allChat = const allChat = [
{
senders: [
'GiVtXApvumQgkUpkTuOGoKbe9ZE2',
'glBNAhj3RrSj5FBDwOzzSnPKN5S2'
],
lastTalk: {
seconds: 1666016615,
nanoseconds: 242000000
},
lastMessage: 'lorem',
glBNAhj3RrSj5FBDwOzzSnPKN5S2: {
uid: 'glBNAhj3RrSj5FBDwOzzSnPKN5S2',
userRead: true,
fullName: 'Carina Lima'
},
docid: 'GiVtXApvumQgkUpkTuOGoKbe9ZE27777glBNAhj3RrSj5FBDwOzzSnPKN5S2',
GiVtXApvumQgkUpkTuOGoKbe9ZE2: {
userRead: false,
uid: 'GiVtXApvumQgkUpkTuOGoKbe9ZE2',
fullName: 'Cristian Derick'
},
id: 'GiVtXApvumQgkUpkTuOGoKbe9ZE27777glBNAhj3RrSj5FBDwOzzSnPKN5S2'
},
{
docid: 'glBNAhj3RrSj5FBDwOzzSnPKN5S27777WBZHUtoZ9DhddVmS07RL0wlvDgz1',
WBZHUtoZ9DhddVmS07RL0wlvDgz1: {
fullName: 'Bruce Dikinson',
uid: 'WBZHUtoZ9DhddVmS07RL0wlvDgz1',
userRead: false
},
lastTalk: {
seconds: 1665066226,
nanoseconds: 646000000
},
lastMessage: 'whatever whatever',
glBNAhj3RrSj5FBDwOzzSnPKN5S2: {
uid: 'glBNAhj3RrSj5FBDwOzzSnPKN5S2',
userRead: true,
fullName: 'Carina Lima'
},
senders: [
'glBNAhj3RrSj5FBDwOzzSnPKN5S2',
'WBZHUtoZ9DhddVmS07RL0wlvDgz1'
],
id: 'glBNAhj3RrSj5FBDwOzzSnPKN5S27777WBZHUtoZ9DhddVmS07RL0wlvDgz1'
},
{
lastTalk: {
seconds: 1666189405,
nanoseconds: 328000000
},
senders: [
'glBNAhj3RrSj5FBDwOzzSnPKN5S2',
'glBNAhj3RrSj5FBDwOzzSnPKN5S2'
],
glBNAhj3RrSj5FBDwOzzSnPKN5S2: {
userRead: false,
fullName: 'Carina Lima',
uid: 'glBNAhj3RrSj5FBDwOzzSnPKN5S2'
},
docid: 'glBNAhj3RrSj5FBDwOzzSnPKN5S27777glBNAhj3RrSj5FBDwOzzSnPKN5S2',
lastMessage: 'whatever',
id: 'glBNAhj3RrSj5FBDwOzzSnPKN5S27777glBNAhj3RrSj5FBDwOzzSnPKN5S2'
},
{
docid: 'glBNAhj3RrSj5FBDwOzzSnPKN5S27777ibPlTju8K2d3PlydP6sdm2T4S2L2',
lastTalk: {
seconds: 1666270072,
nanoseconds: 99000000
},
lastMessage: 'Okay',
senders: [
'glBNAhj3RrSj5FBDwOzzSnPKN5S2',
'ibPlTju8K2d3PlydP6sdm2T4S2L2'
],
ibPlTju8K2d3PlydP6sdm2T4S2L2: {
uid: 'ibPlTju8K2d3PlydP6sdm2T4S2L2',
userRead: true,
fullName: 'Wanderson Santos'
},
glBNAhj3RrSj5FBDwOzzSnPKN5S2: {
userRead: false,
fullName: 'Carina Lima',
uid: 'glBNAhj3RrSj5FBDwOzzSnPKN5S2'
},
id: 'glBNAhj3RrSj5FBDwOzzSnPKN5S27777ibPlTju8K2d3PlydP6sdm2T4S2L2'
}
]
我正在像這樣清理它,以便只有我正在與之交談的人的資料,并且已經以這種方式排序。
const fRes = allChat.map(ele => {
if (!ele || !ele.senders || !ele.senders.includes(myUid)) return null
const [newok] = ele.senders.filter(kv => kv !== myUid)
let finalUser = newok
if (ele.senders.filter(cv => cv === myUid).length === 2) finalUser = myUid
return {
...ele[finalUser],
lastMessage: ele.lastMessage,
lastTalk: ele.lastTalk.toDate && new Date(ele.lastTalk.toDate()).getTime()
}
}).filter(kk => kk).filter(wv => findUser(wv)).sort((a, b) => b.lastTalk - a.lastTalk)
回復:
fRes = [
{
fullName: 'Wanderson Santos',
uid: 'ibPlTju8K2d3PlydP6sdm2T4S2L2',
userRead: true,
lastMessage: 'okay',
lastTalk: 1666270072099
},
{
uid: 'glBNAhj3RrSj5FBDwOzzSnPKN5S2',
fullName: 'Carina Lima',
userRead: false,
lastMessage: 'whatever',
lastTalk: 1666189405328
},
{
uid: 'GiVtXApvumQgkUpkTuOGoKbe9ZE2',
userRead: false,
fullName: 'Cristian Derick',
lastMessage: 'lorem',
lastTalk: 1666016615242
},
{
uid: 'WBZHUtoZ9DhddVmS07RL0wlvDgz1',
userRead: false,
fullName: 'Bruce Dikinson',
lastMessage: 'whatever whatever',
lastTalk: 1665066226646
}
]
現在當我在這個陣列上插入 uid 字串時
const priority = [
'WBZHUtoZ9DhddVmS07RL0wlvDgz1',
'GiVtXApvumQgkUpkTuOGoKbe9ZE2'
]
我想要一種基于優先級的新排序,應該是:
[
{
uid: 'GiVtXApvumQgkUpkTuOGoKbe9ZE2',
userRead: false,
fullName: 'Cristian Derick',
lastMessage: 'lorem',
lastTalk: 1666016615242
},
{
uid: 'WBZHUtoZ9DhddVmS07RL0wlvDgz1',
userRead: false,
fullName: 'Bruce Dikinson',
lastMessage: 'whatever whatever',
lastTalk: 1665066226646
},
{
fullName: 'Wanderson Santos',
uid: 'ibPlTju8K2d3PlydP6sdm2T4S2L2',
userRead: true,
lastMessage: 'okay',
lastTalk: 1666270072099
},
{
uid: 'glBNAhj3RrSj5FBDwOzzSnPKN5S2',
fullName: 'Carina Lima',
userRead: false,
lastMessage: 'whatever',
lastTalk: 1666189405328
}
]
基于 Last Talk 和 Priority 按優先級排序,然后是其余用戶
uj5u.com熱心網友回復:
.sort((a, b) => {
const aPriority = priority.indexOf(a.uid)
const bPriority = priority.indexOf(b.uid)
if (aPriority !== -1 && bPriority !== -1) {
return bPriority - aPriority
}
if (aPriority !== -1) {
return -1
}
if (bPriority !== -1) {
return 1
}
return b.lastTalk - a.lastTalk
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/522670.html
