feat: 完善中文心理测评平台
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
const avoidanceItems = [1, 2, 3, 4, 5, 6];
|
||||
const anxietyItems = [7, 8, 9];
|
||||
const reverseAvoidanceItems = new Set([1, 2, 3, 4]);
|
||||
|
||||
function scoreItem(answers: string[], item: number) {
|
||||
const raw = Number(answers[item - 1] || 1);
|
||||
return reverseAvoidanceItems.has(item) ? 8 - raw : raw;
|
||||
}
|
||||
|
||||
function average(values: number[]) {
|
||||
return values.reduce((sum, value) => sum + value, 0) / values.length;
|
||||
}
|
||||
|
||||
export function calculateAttachmentResults(answers: string[]) {
|
||||
const avoidance = average(avoidanceItems.map((item) => scoreItem(answers, item)));
|
||||
const anxiety = average(anxietyItems.map((item) => Number(answers[item - 1] || 1)));
|
||||
|
||||
let pattern:
|
||||
| 'secure'
|
||||
| 'preoccupied'
|
||||
| 'dismissive'
|
||||
| 'fearful' = 'secure';
|
||||
|
||||
const highAvoidance = avoidance >= 4;
|
||||
const highAnxiety = anxiety >= 4;
|
||||
|
||||
if (highAvoidance && highAnxiety) {
|
||||
pattern = 'fearful';
|
||||
} else if (highAvoidance) {
|
||||
pattern = 'dismissive';
|
||||
} else if (highAnxiety) {
|
||||
pattern = 'preoccupied';
|
||||
}
|
||||
|
||||
return {
|
||||
avoidance,
|
||||
anxiety,
|
||||
pattern,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user