mbti.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  1. /**
  2. * MBTI人格测试工具函数
  3. */
  4. // MBTI测试题目库(简化版,包含16个核心题目)
  5. export const MBTI_QUESTIONS = [
  6. // E(外向) vs I(内向) - 4题
  7. {
  8. id: 1,
  9. question: '在聚会中,你通常会:',
  10. type: 'choice',
  11. dimension: 'EI',
  12. options: [
  13. { text: '主动与新朋友交谈,享受热闹的气氛', score: { E: 2, I: 0 } },
  14. { text: '与少数熟悉的朋友深入交流', score: { E: 0, I: 2 } }
  15. ]
  16. },
  17. {
  18. id: 2,
  19. question: '工作时,你更喜欢:',
  20. type: 'choice',
  21. dimension: 'EI',
  22. options: [
  23. { text: '在开放的环境中与同事协作', score: { E: 2, I: 0 } },
  24. { text: '在安静的环境中独立工作', score: { E: 0, I: 2 } }
  25. ]
  26. },
  27. {
  28. id: 3,
  29. question: '休息时间,你倾向于:',
  30. type: 'choice',
  31. dimension: 'EI',
  32. options: [
  33. { text: '出去活动,与朋友聚会', score: { E: 2, I: 0 } },
  34. { text: '在家安静地放松,独处或看书', score: { E: 0, I: 2 } }
  35. ]
  36. },
  37. {
  38. id: 4,
  39. question: '面对压力时,你会:',
  40. type: 'choice',
  41. dimension: 'EI',
  42. options: [
  43. { text: '寻求朋友的陪伴和支持', score: { E: 2, I: 0 } },
  44. { text: '独自思考,寻找解决方案', score: { E: 0, I: 2 } }
  45. ]
  46. },
  47. // S(感觉) vs N(直觉) - 4题
  48. {
  49. id: 5,
  50. question: '学习新知识时,你更喜欢:',
  51. type: 'choice',
  52. dimension: 'SN',
  53. options: [
  54. { text: '从具体的例子和实践中学习', score: { S: 2, N: 0 } },
  55. { text: '理解概念和理论框架', score: { S: 0, N: 2 } }
  56. ]
  57. },
  58. {
  59. id: 6,
  60. question: '你更关注:',
  61. type: 'choice',
  62. dimension: 'SN',
  63. options: [
  64. { text: '当下的事实和细节', score: { S: 2, N: 0 } },
  65. { text: '未来的可能性和潜力', score: { S: 0, N: 2 } }
  66. ]
  67. },
  68. {
  69. id: 7,
  70. question: '描述一个地方时,你会:',
  71. type: 'choice',
  72. dimension: 'SN',
  73. options: [
  74. { text: '详细描述看到的具体景物', score: { S: 2, N: 0 } },
  75. { text: '描述那里的氛围和感受', score: { S: 0, N: 2 } }
  76. ]
  77. },
  78. {
  79. id: 8,
  80. question: '你更信任:',
  81. type: 'choice',
  82. dimension: 'SN',
  83. options: [
  84. { text: '已被证实的方法和经验', score: { S: 2, N: 0 } },
  85. { text: '新颖的想法和创新方案', score: { S: 0, N: 2 } }
  86. ]
  87. },
  88. // T(思考) vs F(情感) - 4题
  89. {
  90. id: 9,
  91. question: '做决定时,你主要考虑:',
  92. type: 'choice',
  93. dimension: 'TF',
  94. options: [
  95. { text: '逻辑分析和客观事实', score: { T: 2, F: 0 } },
  96. { text: '个人价值观和他人感受', score: { T: 0, F: 2 } }
  97. ]
  98. },
  99. {
  100. id: 10,
  101. question: '批评他人时,你会:',
  102. type: 'choice',
  103. dimension: 'TF',
  104. options: [
  105. { text: '直接指出问题所在', score: { T: 2, F: 0 } },
  106. { text: '考虑对方感受,委婉表达', score: { T: 0, F: 2 } }
  107. ]
  108. },
  109. {
  110. id: 11,
  111. question: '你更重视:',
  112. type: 'choice',
  113. dimension: 'TF',
  114. options: [
  115. { text: '公平和原则', score: { T: 2, F: 0 } },
  116. { text: '和谐和理解', score: { T: 0, F: 2 } }
  117. ]
  118. },
  119. {
  120. id: 12,
  121. question: '解决冲突时,你倾向于:',
  122. type: 'choice',
  123. dimension: 'TF',
  124. options: [
  125. { text: '分析问题,寻找最优解', score: { T: 2, F: 0 } },
  126. { text: '关注各方情感,寻求妥协', score: { T: 0, F: 2 } }
  127. ]
  128. },
  129. // J(判断) vs P(知觉) - 4题
  130. {
  131. id: 13,
  132. question: '对于计划,你的态度是:',
  133. type: 'choice',
  134. dimension: 'JP',
  135. options: [
  136. { text: '制定详细计划并严格执行', score: { J: 2, P: 0 } },
  137. { text: '保持灵活,根据情况调整', score: { J: 0, P: 2 } }
  138. ]
  139. },
  140. {
  141. id: 14,
  142. question: '工作环境中,你喜欢:',
  143. type: 'choice',
  144. dimension: 'JP',
  145. options: [
  146. { text: '有明确的截止日期和规范', score: { J: 2, P: 0 } },
  147. { text: '灵活的时间安排和自由度', score: { J: 0, P: 2 } }
  148. ]
  149. },
  150. {
  151. id: 15,
  152. question: '面对选择时,你会:',
  153. type: 'choice',
  154. dimension: 'JP',
  155. options: [
  156. { text: '快速决定,然后坚持下去', score: { J: 2, P: 0 } },
  157. { text: '保持开放,随时准备改变', score: { J: 0, P: 2 } }
  158. ]
  159. },
  160. {
  161. id: 16,
  162. question: '你的生活方式更像:',
  163. type: 'choice',
  164. dimension: 'JP',
  165. options: [
  166. { text: '有条不紊,按计划进行', score: { J: 2, P: 0 } },
  167. { text: '随性自然,充满变化', score: { J: 0, P: 2 } }
  168. ]
  169. }
  170. ]
  171. // MBTI 16种人格类型数据
  172. export const MBTI_TYPES = {
  173. INTJ: {
  174. type: 'INTJ',
  175. name: '建筑师',
  176. description: '富有想象力和战略性的思想家,一切皆在计划之中。',
  177. traits: ['独立', '有远见', '坚定', '追求完美', '善于规划'],
  178. careers: ['软件工程师', '科学家', '建筑师', '战略规划师', '投资分析师'],
  179. loveStyle: '在恋爱中寻求深度和意义,重视心灵契合,需要理解和空间。',
  180. compatibility: ['ENFP', 'ENTP', 'INFJ'],
  181. dimensions: [
  182. { name: '内向(I) vs 外向(E)', percent: 75, color: '#667eea', description: '更喜欢独处思考' },
  183. { name: '直觉(N) vs 感觉(S)', percent: 85, color: '#764ba2', description: '关注未来可能性' },
  184. { name: '思考(T) vs 情感(F)', percent: 80, color: '#f093fb', description: '逻辑导向决策' },
  185. { name: '判断(J) vs 知觉(P)', percent: 90, color: '#f5576c', description: '喜欢计划和结构' }
  186. ]
  187. },
  188. INTP: {
  189. type: 'INTP',
  190. name: '思想家',
  191. description: '创新的发明者,对知识有着止不住的渴望。',
  192. traits: ['好奇心强', '独立思考', '逻辑清晰', '创新', '灵活'],
  193. careers: ['研究员', '哲学家', '数学家', '程序员', '理论物理学家'],
  194. loveStyle: '重视智力交流和精神连接,需要个人空间和理解。',
  195. compatibility: ['ENFJ', 'ENTJ', 'INFP'],
  196. dimensions: [
  197. { name: '内向(I) vs 外向(E)', percent: 70, color: '#667eea', description: '更喜欢独处思考' },
  198. { name: '直觉(N) vs 感觉(S)', percent: 80, color: '#764ba2', description: '关注理论和概念' },
  199. { name: '思考(T) vs 情感(F)', percent: 85, color: '#f093fb', description: '逻辑导向决策' },
  200. { name: '判断(J) vs 知觉(P)', percent: 25, color: '#f5576c', description: '保持灵活开放' }
  201. ]
  202. },
  203. ENTJ: {
  204. type: 'ENTJ',
  205. name: '指挥官',
  206. description: '大胆、富有想象力、意志强烈的领导者,总能找到或创造解决方法。',
  207. traits: ['领导力强', '果断', '自信', '有野心', '善于规划'],
  208. careers: ['CEO', '管理顾问', '律师', '投资银行家', '企业家'],
  209. loveStyle: '直接而热情,寻求能够匹配其野心和智慧的伴侣。',
  210. compatibility: ['INFP', 'INTP', 'ENFP'],
  211. dimensions: [
  212. { name: '内向(I) vs 外向(E)', percent: 25, color: '#667eea', description: '精力来源于外界' },
  213. { name: '直觉(N) vs 感觉(S)', percent: 80, color: '#764ba2', description: '关注大局和未来' },
  214. { name: '思考(T) vs 情感(F)', percent: 85, color: '#f093fb', description: '理性客观决策' },
  215. { name: '判断(J) vs 知觉(P)', percent: 90, color: '#f5576c', description: '喜欢控制和计划' }
  216. ]
  217. },
  218. ENTP: {
  219. type: 'ENTP',
  220. name: '辩论家',
  221. description: '聪明好奇的思想者,不能抗拒智力上的挑战。',
  222. traits: ['创新', '机智', '热情', '善于辩论', '适应力强'],
  223. careers: ['创业家', '市场营销', '记者', '心理学家', '发明家'],
  224. loveStyle: '充满激情和创意,喜欢智力刺激的关系。',
  225. compatibility: ['INFJ', 'INTJ', 'ENFJ'],
  226. dimensions: [
  227. { name: '内向(I) vs 外向(E)', percent: 20, color: '#667eea', description: '外向活跃' },
  228. { name: '直觉(N) vs 感觉(S)', percent: 85, color: '#764ba2', description: '充满创意想法' },
  229. { name: '思考(T) vs 情感(F)', percent: 75, color: '#f093fb', description: '逻辑分析优先' },
  230. { name: '判断(J) vs 知觉(P)', percent: 20, color: '#f5576c', description: '灵活适应' }
  231. ]
  232. },
  233. INFJ: {
  234. type: 'INFJ',
  235. name: '提倡者',
  236. description: '安静而神秘,同时鼓舞他人的理想主义者。',
  237. traits: ['有洞察力', '理想主义', '有决心', '富有创意', '利他主义'],
  238. careers: ['心理咨询师', '作家', '教师', '人力资源', '非营利组织工作者'],
  239. loveStyle: '寻求深层的情感连接,重视精神契合和相互成长。',
  240. compatibility: ['ENTP', 'ENFP', 'INTJ'],
  241. dimensions: [
  242. { name: '内向(I) vs 外向(E)', percent: 80, color: '#667eea', description: '内向但关心他人' },
  243. { name: '直觉(N) vs 感觉(S)', percent: 85, color: '#764ba2', description: '洞察力强' },
  244. { name: '思考(T) vs 情感(F)', percent: 30, color: '#f093fb', description: '重视价值观和情感' },
  245. { name: '判断(J) vs 知觉(P)', percent: 80, color: '#f5576c', description: '有条理有决断' }
  246. ]
  247. },
  248. INFP: {
  249. type: 'INFP',
  250. name: '调停者',
  251. description: '富有诗意、善良、利他的人,总是热切地寻求帮助好的事业。',
  252. traits: ['理想主义', '忠诚', '适应性强', '好奇心强', '善于表达'],
  253. careers: ['作家', '艺术家', '心理学家', '社工', '人力资源专员'],
  254. loveStyle: '温暖而深情,重视真诚和个人价值观的匹配。',
  255. compatibility: ['ENFJ', 'ENTJ', 'INFJ'],
  256. dimensions: [
  257. { name: '内向(I) vs 外向(E)', percent: 85, color: '#667eea', description: '需要安静的环境' },
  258. { name: '直觉(N) vs 感觉(S)', percent: 80, color: '#764ba2', description: '关注可能性' },
  259. { name: '思考(T) vs 情感(F)', percent: 20, color: '#f093fb', description: '价值观驱动' },
  260. { name: '判断(J) vs 知觉(P)', percent: 25, color: '#f5576c', description: '灵活开放' }
  261. ]
  262. },
  263. ENFJ: {
  264. type: 'ENFJ',
  265. name: '主人公',
  266. description: '富有魅力、鼓舞人心的领导者,有能力吸引听众。',
  267. traits: ['有感染力', '可靠', '利他主义', '善于沟通', '天生的领导者'],
  268. careers: ['教师', '人力资源', '政治家', '心理咨询师', '公关专员'],
  269. loveStyle: '热情而支持性强,致力于伴侣的成长和幸福。',
  270. compatibility: ['INFP', 'ISFP', 'INTP'],
  271. dimensions: [
  272. { name: '内向(I) vs 外向(E)', percent: 20, color: '#667eea', description: '外向且善于社交' },
  273. { name: '直觉(N) vs 感觉(S)', percent: 80, color: '#764ba2', description: '有远见有洞察' },
  274. { name: '思考(T) vs 情感(F)', percent: 25, color: '#f093fb', description: '以人为本' },
  275. { name: '判断(J) vs 知觉(P)', percent: 85, color: '#f5576c', description: '有组织有计划' }
  276. ]
  277. },
  278. ENFP: {
  279. type: 'ENFP',
  280. name: '竞选者',
  281. description: '热情、有创造力、社交能力强的自由精神,总能找到微笑的理由。',
  282. traits: ['热情', '创造力', '社交能力强', '好奇心强', '精力充沛'],
  283. careers: ['市场营销', '记者', '演员', '心理学家', '创业家'],
  284. loveStyle: '充满激情和创意,寻求能够分享冒险和梦想的伴侣。',
  285. compatibility: ['INTJ', 'INFJ', 'ENTJ'],
  286. dimensions: [
  287. { name: '内向(I) vs 外向(E)', percent: 15, color: '#667eea', description: '外向且充满活力' },
  288. { name: '直觉(N) vs 感觉(S)', percent: 85, color: '#764ba2', description: '想象力丰富' },
  289. { name: '思考(T) vs 情感(F)', percent: 30, color: '#f093fb', description: '重视个人价值' },
  290. { name: '判断(J) vs 知觉(P)', percent: 20, color: '#f5576c', description: '灵活自发' }
  291. ]
  292. },
  293. ISTJ: {
  294. type: 'ISTJ',
  295. name: '物流师',
  296. description: '实用主义的逻辑学家,忠实可靠。',
  297. traits: ['责任心强', '实际', '有条理', '传统', '诚实正直'],
  298. careers: ['会计师', '审计员', '银行家', '法官', '工程师'],
  299. loveStyle: '忠诚可靠,通过实际行动表达爱意。',
  300. compatibility: ['ESFP', 'ESTP', 'ISFP'],
  301. dimensions: [
  302. { name: '内向(I) vs 外向(E)', percent: 80, color: '#667eea', description: '内向且专注' },
  303. { name: '直觉(N) vs 感觉(S)', percent: 20, color: '#764ba2', description: '注重事实细节' },
  304. { name: '思考(T) vs 情感(F)', percent: 75, color: '#f093fb', description: '逻辑决策' },
  305. { name: '判断(J) vs 知觉(P)', percent: 90, color: '#f5576c', description: '有序可靠' }
  306. ]
  307. },
  308. ISFJ: {
  309. type: 'ISFJ',
  310. name: '守护者',
  311. description: '非常专注、温暖的守护者,时刻准备保护挚爱的人。',
  312. traits: ['支持性强', '可靠', '耐心', '勤奋', '忠诚'],
  313. careers: ['护士', '教师', '社工', '人力资源', '心理咨询师'],
  314. loveStyle: '温暖体贴,通过照顾和支持表达爱意。',
  315. compatibility: ['ESTP', 'ESFP', 'ISFP'],
  316. dimensions: [
  317. { name: '内向(I) vs 外向(E)', percent: 75, color: '#667eea', description: '内向但关心他人' },
  318. { name: '直觉(N) vs 感觉(S)', percent: 25, color: '#764ba2', description: '关注现实需求' },
  319. { name: '思考(T) vs 情感(F)', percent: 20, color: '#f093fb', description: '情感导向' },
  320. { name: '判断(J) vs 知觉(P)', percent: 85, color: '#f5576c', description: '有条理负责' }
  321. ]
  322. },
  323. ESTJ: {
  324. type: 'ESTJ',
  325. name: '总经理',
  326. description: '出色的管理者,在管理事情和人员方面无与伦比。',
  327. traits: ['组织能力强', '实际', '逻辑性强', '果断', '忠诚'],
  328. careers: ['经理', '行政人员', '法官', '老师', '销售经理'],
  329. loveStyle: '传统而稳定,重视承诺和家庭责任。',
  330. compatibility: ['ISFP', 'INFP', 'ISTP'],
  331. dimensions: [
  332. { name: '内向(I) vs 外向(E)', percent: 15, color: '#667eea', description: '外向且善于领导' },
  333. { name: '直觉(N) vs 感觉(S)', percent: 25, color: '#764ba2', description: '务实现实' },
  334. { name: '思考(T) vs 情感(F)', percent: 80, color: '#f093fb', description: '客观理性' },
  335. { name: '判断(J) vs 知觉(P)', percent: 90, color: '#f5576c', description: '组织性强' }
  336. ]
  337. },
  338. ESFJ: {
  339. type: 'ESFJ',
  340. name: '执政官',
  341. description: '非常关心他人、社交能力强、在意他人需要的人。',
  342. traits: ['热心', '负责任', '合作', '善于社交', '忠诚'],
  343. careers: ['护士', '教师', '社工', '客服代表', '活动策划'],
  344. loveStyle: '温暖支持,重视和谐的关系和共同的价值观。',
  345. compatibility: ['ISFP', 'INFP', 'ISTP'],
  346. dimensions: [
  347. { name: '内向(I) vs 外向(E)', percent: 20, color: '#667eea', description: '外向且善于交际' },
  348. { name: '直觉(N) vs 感觉(S)', percent: 30, color: '#764ba2', description: '关注具体需求' },
  349. { name: '思考(T) vs 情感(F)', percent: 25, color: '#f093fb', description: '重视他人感受' },
  350. { name: '判断(J) vs 知觉(P)', percent: 80, color: '#f5576c', description: '有条理有责任' }
  351. ]
  352. },
  353. ISTP: {
  354. type: 'ISTP',
  355. name: '鉴赏家',
  356. description: '大胆而务实的实验家,善于使用各种工具。',
  357. traits: ['独立', '适应性强', '务实', '灵活', '好奇心强'],
  358. careers: ['工程师', '机械师', '飞行员', '法医', '运动员'],
  359. loveStyle: '独立而低调,通过行动而非言语表达关爱。',
  360. compatibility: ['ESFJ', 'ESTJ', 'ENFJ'],
  361. dimensions: [
  362. { name: '内向(I) vs 外向(E)', percent: 85, color: '#667eea', description: '独立内向' },
  363. { name: '直觉(N) vs 感觉(S)', percent: 20, color: '#764ba2', description: '关注现实操作' },
  364. { name: '思考(T) vs 情感(F)', percent: 80, color: '#f093fb', description: '逻辑分析' },
  365. { name: '判断(J) vs 知觉(P)', percent: 25, color: '#f5576c', description: '灵活适应' }
  366. ]
  367. },
  368. ISFP: {
  369. type: 'ISFP',
  370. name: '探险家',
  371. description: '灵活、迷人的艺术家,时刻准备探索新的可能性。',
  372. traits: ['友善', '敏感', '温和', '艺术天赋', '价值观强'],
  373. careers: ['艺术家', '音乐家', '心理咨询师', '兽医', '厨师'],
  374. loveStyle: '温柔而深情,重视个人空间和价值观的契合。',
  375. compatibility: ['ENFJ', 'ESFJ', 'ESTJ'],
  376. dimensions: [
  377. { name: '内向(I) vs 外向(E)', percent: 80, color: '#667eea', description: '内向且敏感' },
  378. { name: '直觉(N) vs 感觉(S)', percent: 30, color: '#764ba2', description: '注重当下体验' },
  379. { name: '思考(T) vs 情感(F)', percent: 15, color: '#f093fb', description: '价值观导向' },
  380. { name: '判断(J) vs 知觉(P)', percent: 20, color: '#f5576c', description: '灵活开放' }
  381. ]
  382. },
  383. ESTP: {
  384. type: 'ESTP',
  385. name: '企业家',
  386. description: '聪明、精力充沛、善于感知的人,真正享受生活在边缘的感觉。',
  387. traits: ['精力充沛', '实际', '友善', '适应性强', '善于观察'],
  388. careers: ['销售', '企业家', '娱乐业', '紧急服务', '运动员'],
  389. loveStyle: '活跃而有趣,喜欢充满活力和冒险的关系。',
  390. compatibility: ['ISFJ', 'ISTJ', 'INFJ'],
  391. dimensions: [
  392. { name: '内向(I) vs 外向(E)', percent: 10, color: '#667eea', description: '外向且活跃' },
  393. { name: '直觉(N) vs 感觉(S)', percent: 15, color: '#764ba2', description: '注重现实体验' },
  394. { name: '思考(T) vs 情感(F)', percent: 75, color: '#f093fb', description: '实用主义' },
  395. { name: '判断(J) vs 知觉(P)', percent: 15, color: '#f5576c', description: '灵活自发' }
  396. ]
  397. },
  398. ESFP: {
  399. type: 'ESFP',
  400. name: '表演者',
  401. description: '自发的、精力充沛、热情的表演者——生活在他们周围绝不无聊。',
  402. traits: ['热情', '友善', '自发', '灵活', '善于激励他人'],
  403. careers: ['表演者', '教师', '社工', '销售', '活动策划'],
  404. loveStyle: '热情而浪漫,喜欢分享快乐和创造美好回忆。',
  405. compatibility: ['ISFJ', 'ISTJ', 'INFJ'],
  406. dimensions: [
  407. { name: '内向(I) vs 外向(E)', percent: 5, color: '#667eea', description: '极度外向' },
  408. { name: '直觉(N) vs 感觉(S)', percent: 20, color: '#764ba2', description: '享受当下' },
  409. { name: '思考(T) vs 情感(F)', percent: 20, color: '#f093fb', description: '情感丰富' },
  410. { name: '判断(J) vs 知觉(P)', percent: 10, color: '#f5576c', description: '自发灵活' }
  411. ]
  412. }
  413. }
  414. /**
  415. * 计算MBTI结果
  416. * @param {Array} answers - 用户答案数组
  417. * @returns {String} MBTI类型 (如: 'INTJ')
  418. */
  419. export function calculateMBTI(answers) {
  420. if (!answers || answers.length !== MBTI_QUESTIONS.length) {
  421. throw new Error('答案数据不完整')
  422. }
  423. // 初始化各维度得分
  424. const scores = {
  425. E: 0, I: 0, // 外向 vs 内向
  426. S: 0, N: 0, // 感觉 vs 直觉
  427. T: 0, F: 0, // 思考 vs 情感
  428. J: 0, P: 0 // 判断 vs 知觉
  429. }
  430. // 计算各维度得分
  431. answers.forEach((answer, index) => {
  432. const question = MBTI_QUESTIONS[index]
  433. if (answer !== null && question && question.options[answer]) {
  434. const option = question.options[answer]
  435. Object.keys(option.score).forEach(key => {
  436. scores[key] += option.score[key]
  437. })
  438. }
  439. })
  440. // 确定每个维度的倾向
  441. const result = [
  442. scores.E > scores.I ? 'E' : 'I',
  443. scores.S > scores.N ? 'S' : 'N',
  444. scores.T > scores.F ? 'T' : 'F',
  445. scores.J > scores.P ? 'J' : 'P'
  446. ].join('')
  447. return result
  448. }
  449. /**
  450. * 获取维度分析数据
  451. * @param {Array} answers - 用户答案数组
  452. * @returns {Object} 维度分析结果
  453. */
  454. export function getDimensionAnalysis(answers) {
  455. const scores = {
  456. E: 0, I: 0, S: 0, N: 0, T: 0, F: 0, J: 0, P: 0
  457. }
  458. // 计算得分
  459. answers.forEach((answer, index) => {
  460. const question = MBTI_QUESTIONS[index]
  461. if (answer !== null && question && question.options[answer]) {
  462. const option = question.options[answer]
  463. Object.keys(option.score).forEach(key => {
  464. scores[key] += option.score[key]
  465. })
  466. }
  467. })
  468. // 计算百分比
  469. return {
  470. EI: {
  471. E: Math.round((scores.E / (scores.E + scores.I)) * 100),
  472. I: Math.round((scores.I / (scores.E + scores.I)) * 100)
  473. },
  474. SN: {
  475. S: Math.round((scores.S / (scores.S + scores.N)) * 100),
  476. N: Math.round((scores.N / (scores.S + scores.N)) * 100)
  477. },
  478. TF: {
  479. T: Math.round((scores.T / (scores.T + scores.F)) * 100),
  480. F: Math.round((scores.F / (scores.T + scores.F)) * 100)
  481. },
  482. JP: {
  483. J: Math.round((scores.J / (scores.J + scores.P)) * 100),
  484. P: Math.round((scores.P / (scores.J + scores.P)) * 100)
  485. }
  486. }
  487. }
  488. /**
  489. * 获取MBTI类型的详细信息
  490. * @param {String} type - MBTI类型
  491. * @returns {Object} 类型详细信息
  492. */
  493. export function getMBTITypeInfo(type) {
  494. return MBTI_TYPES[type] || null
  495. }
  496. /**
  497. * 获取随机的MBTI小贴士
  498. * @returns {String} 小贴士文本
  499. */
  500. export function getRandomTip() {
  501. const tips = [
  502. 'MBTI只是了解自己的工具之一,不要完全依赖测试结果',
  503. '人格类型会随着年龄和经历发生变化',
  504. '每种类型都有其独特的优势,没有好坏之分',
  505. '了解伴侣的MBTI类型有助于建立更好的关系',
  506. '在团队合作中,不同类型的人能够发挥不同的优势'
  507. ]
  508. return tips[Math.floor(Math.random() * tips.length)]
  509. }