41 lines
1.0 KiB
TypeScript
41 lines
1.0 KiB
TypeScript
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,
|
|
};
|
|
}
|