93 lines
2.7 KiB
JavaScript
93 lines
2.7 KiB
JavaScript
|
|
// 将面试题内容.json的Markdown格式转换为组件需要的结构化数据
|
|||
|
|
import interviewQuestionsData from '../data/interviewQuestions.json';
|
|||
|
|
|
|||
|
|
// 解析Markdown格式的面试题内容
|
|||
|
|
export const parseInterviewQuestions = (content) => {
|
|||
|
|
if (!content) return [];
|
|||
|
|
|
|||
|
|
const questions = [];
|
|||
|
|
const lines = content.split('\n').filter(line => line.trim());
|
|||
|
|
|
|||
|
|
let currentQuestion = null;
|
|||
|
|
let currentAnswer = '';
|
|||
|
|
let collectingAnswer = false;
|
|||
|
|
let questionIndex = 0;
|
|||
|
|
|
|||
|
|
for (let i = 0; i < lines.length; i++) {
|
|||
|
|
const line = lines[i].trim();
|
|||
|
|
|
|||
|
|
// 跳过标题行
|
|||
|
|
if (line.startsWith('#')) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 匹配问题(数字开头)
|
|||
|
|
if (/^\d+\.\s/.test(line)) {
|
|||
|
|
// 保存上一个问题
|
|||
|
|
if (currentQuestion && currentAnswer) {
|
|||
|
|
questions.push({
|
|||
|
|
id: `q${questionIndex}`,
|
|||
|
|
question: currentQuestion,
|
|||
|
|
answer: currentAnswer.trim()
|
|||
|
|
});
|
|||
|
|
questionIndex++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 开始新问题
|
|||
|
|
currentQuestion = line.replace(/^\d+\.\s/, '').trim();
|
|||
|
|
currentAnswer = '';
|
|||
|
|
collectingAnswer = false;
|
|||
|
|
}
|
|||
|
|
// 匹配答案标记
|
|||
|
|
else if (line.includes('答案:') || line.includes('示例回答:') || line.includes('参考答案:')) {
|
|||
|
|
collectingAnswer = true;
|
|||
|
|
// 提取答案内容(可能在同一行)
|
|||
|
|
const answerMatch = line.match(/(?:答案:|示例回答:|参考答案:)(.*)/);
|
|||
|
|
if (answerMatch && answerMatch[1]) {
|
|||
|
|
currentAnswer = answerMatch[1].trim();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 收集答案内容
|
|||
|
|
else if (collectingAnswer && line) {
|
|||
|
|
// 如果是新的段落或列表项,添加换行
|
|||
|
|
if (currentAnswer && !line.startsWith('-') && !line.startsWith('•')) {
|
|||
|
|
currentAnswer += ' ';
|
|||
|
|
}
|
|||
|
|
currentAnswer += line;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 保存最后一个问题
|
|||
|
|
if (currentQuestion && currentAnswer) {
|
|||
|
|
questions.push({
|
|||
|
|
id: `q${questionIndex}`,
|
|||
|
|
question: currentQuestion,
|
|||
|
|
answer: currentAnswer.trim()
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return questions;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 创建岗位群到面试题的映射
|
|||
|
|
export const createInterviewQuestionsMap = () => {
|
|||
|
|
const map = {};
|
|||
|
|
|
|||
|
|
interviewQuestionsData.forEach(item => {
|
|||
|
|
const groupName = item['岗位群名称'];
|
|||
|
|
const questions = parseInterviewQuestions(item['面试题内容']);
|
|||
|
|
|
|||
|
|
// 只保留前10个问题(避免内容过多)
|
|||
|
|
map[groupName] = questions.slice(0, 10);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return map;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 导出映射
|
|||
|
|
export const interviewQuestionsMap = createInterviewQuestionsMap();
|
|||
|
|
|
|||
|
|
// 根据岗位群名称获取格式化的面试题
|
|||
|
|
export const getFormattedQuestions = (groupName) => {
|
|||
|
|
return interviewQuestionsMap[groupName] || [];
|
|||
|
|
};
|