在JavaScript中,高效筛选和合并聊天记录中特定问题的全部回复可以通过以下步骤实现:
数据结构:假设每条聊天记录是一个对象,包含message
(消息内容)、isReply
(是否是回复)、parentId
(如果是回复,指向被回复的消息ID)等字段。
筛选特定问题的回复:首先找到特定问题的消息,然后根据parentId
筛选出所有直接回复该问题的消息。
递归查找所有回复:对于每条直接回复,递归查找其所有子回复,直到没有更多回复为止。
合并回复:将所有找到的回复合并到一个数组中。
以下是一个示例代码:
// 示例聊天记录数据
const chatRecords = [
{ id: 1, message: "问题1", isReply: false, parentId: null },
{ id: 2, message: "回复1", isReply: true, parentId: 1 },
{ id: 3, message: "回复2", isReply: true, parentId: 1 },
{ id: 4, message: "回复1的子回复", isReply: true, parentId: 2 },
{ id: 5, message: "问题2", isReply: false, parentId: null },
{ id: 6, message: "回复3", isReply: true, parentId: 5 },
];
// 查找特定问题的所有回复
function findReplies(records, questionId) {
const replies = [];
// 递归查找所有回复
function findRepliesRecursive(parentId) {
records.forEach(record => {
if (record.parentId === parentId) {
replies.push(record);
findRepliesRecursive(record.id); // 递归查找子回复
}
});
}
// 开始查找
findRepliesRecursive(questionId);
return replies;
}
// 示例:查找问题1的所有回复
const questionId = 1;
const allReplies = findReplies(chatRecords, questionId);
console.log(allReplies);
chatRecords
:这是一个包含所有聊天记录的数组,每条记录是一个对象。findReplies
:这个函数接受聊天记录数组和特定问题的ID作为参数,返回该问题的所有回复。findRepliesRecursive
:这是一个递归函数,用于查找特定问题的所有直接和间接回复。replies
:这是一个数组,用于存储找到的所有回复。[
{ id: 2, message: "回复1", isReply: true, parentId: 1 },
{ id: 4, message: "回复1的子回复", isReply: true, parentId: 2 },
{ id: 3, message: "回复2", isReply: true, parentId: 1 }
]
Map
或Set
来优化查找效率。通过这种方式,你可以高效地筛选和合并聊天记录中特定问题的全部回复。