{"id":18486290,"url":"https://github.com/maxgfr/similarities","last_synced_at":"2026-02-07T20:14:44.210Z","repository":{"id":64887966,"uuid":"578282968","full_name":"maxgfr/similarities","owner":"maxgfr","description":"This package contains functions to find similarities between arrays","archived":false,"fork":false,"pushed_at":"2025-12-10T21:32:21.000Z","size":2280,"stargazers_count":2,"open_issues_count":9,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-11T08:51:12.896Z","etag":null,"topics":["array-comparison","combinatorics","node","pearson","pearson-coefficient","pearson-correlation","pearson-correlation-coefficient","similarities","typescript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/similarities","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maxgfr.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-12-14T17:27:58.000Z","updated_at":"2025-12-04T22:21:07.000Z","dependencies_parsed_at":"2024-11-19T13:19:08.173Z","dependency_job_id":"f5a70864-fbdd-4511-9622-d81cf2b71545","html_url":"https://github.com/maxgfr/similarities","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/maxgfr/similarities","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxgfr%2Fsimilarities","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxgfr%2Fsimilarities/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxgfr%2Fsimilarities/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxgfr%2Fsimilarities/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxgfr","download_url":"https://codeload.github.com/maxgfr/similarities/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxgfr%2Fsimilarities/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29207446,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T20:13:33.422Z","status":"ssl_error","status_checked_at":"2026-02-07T20:13:31.455Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["array-comparison","combinatorics","node","pearson","pearson-coefficient","pearson-correlation","pearson-correlation-coefficient","similarities","typescript"],"created_at":"2024-11-06T12:48:54.251Z","updated_at":"2026-02-07T20:14:44.206Z","avatar_url":"https://github.com/maxgfr.png","language":"TypeScript","readme":"# similarities\n\nThis package contains functions to find similarities between arrays. Three functions are available: `findSimilarities` and `pearsonCorrelationNumber`/`pearsonCorrelationString`.\n\n**✨ Key Features:**\n- 🔒 **Type-safe**: Full TypeScript support with generics\n- 🚀 **Performant**: O(n) lookups using Set instead of indexOf\n- 🛡️ **Robust**: Input validation and edge case handling\n- 💎 **Immutable**: No mutations of input arrays\n\n## Installation\n\n```bash\nyarn add similarities\n```\n\n## Find similarities in arrays\n\nThe `findSimilarities` function takes in two arrays, arrayA and arrayB, and returns an array of objects containing all possible combinations of elements from arrayA and the percentage of similarities between each combination and arrayB.\n\n\u003e **Note:** This function uses default sorting (lexicographic). For arrays with numeric values, results are sorted as strings (e.g., `[1, 10, 2]`). This is typically used with string arrays.\n\n```typescript\nimport { findSimilarities } from 'similarities';\n\nconst arrayA = ['dog', 'cat', 'bird'];\nconst arrayB = ['bird', 'horse', 'tiger'];\nconst result = findSimilarities(arrayA, arrayB);\nconsole.log(result);\n// Output:\n// [\n//   { item: ['bird'], similarities: 33.33333333333333 },\n//   { item: ['bird', 'cat'], similarities: 33.33333333333333 },\n//   { item: ['cat'], similarities: 0 },\n//   { item: ['bird', 'dog'], similarities: 33.33333333333333 },\n//   { item: ['bird', 'cat', 'dog'], similarities: 33.33333333333333 },\n//   { item: ['cat', 'dog'], similarities: 0 },\n//   { item: ['dog'], similarities: 0 },\n// ]\n```\n\n## Pearson correlation coefficient\n\nThe `pearsonCorrelationNumber` and `pearsonCorrelationString` functions take in two arrays, arrayA and arrayB, and returns the Pearson correlation coefficient between the two arrays.\n\n```typescript\nimport { pearsonCorrelationNumber } from 'similarities';\n\nconst arrayA = [1, 2, 3, 4, 5];\nconst arrayB = [1, 2, 3, 4, 5];\nconst result1 = pearsonCorrelationNumber(arrayA, arrayB);\nconsole.log(result1);\n// Output: 1\n\nconst arrayC = [1, 2, 3, 4, 5];\nconst arrayD = [5, 4, 3, 2, 1];\nconst result2 = pearsonCorrelationNumber(arrayC, arrayD);\nconsole.log(result2);\n// Output: -1\n\nconst arrayE = [1, 2, 3, 4, 5];\nconst arrayF = [1, 2, 3, 4, 6];\nconst result3 = pearsonCorrelationNumber(arrayE, arrayF);\nconsole.log(result3);\n// Output: 0.99498743710662\n```\n\nIt also works with strings.\n\n```typescript\nimport { pearsonCorrelationString } from 'similarities';\n\nconst arrayA = ['a', 'b', 'c'];\nconst arrayB = ['c', 'b', 'a'];\nconst result = pearsonCorrelationString(arrayA, arrayB);\nconsole.log(result);\n// Output: -1\n```\n\n## Error Handling\n\nAll functions include robust input validation:\n\n```typescript\n// Throws: \"Arrays cannot be null or undefined\"\nfindSimilarities(null, ['a', 'b']);\n\n// Throws: \"Datasets cannot be empty\"\npearsonCorrelationNumber([], []);\n\n// Throws: \"The arrays must have the same length\"\npearsonCorrelationString(['a', 'b'], ['a', 'b', 'c']);\n\n// Returns: 0 (handles division by zero gracefully)\npearsonCorrelationNumber([5, 5, 5], [10, 10, 10]);\n```\n\n## TypeScript Support\n\nFull generic type support for type safety:\n\n```typescript\nimport { findSimilarities, SimilarityResult } from 'similarities';\n\n// Strongly typed with generics\nconst result: SimilarityResult\u003cstring\u003e[] = findSimilarities(\n  ['a', 'b', 'c'],\n  ['b', 'c', 'd']\n);\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxgfr%2Fsimilarities","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxgfr%2Fsimilarities","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxgfr%2Fsimilarities/lists"}