{"id":22173225,"url":"https://github.com/litejs/natural-compare-lite","last_synced_at":"2025-05-16T04:03:40.113Z","repository":{"id":7777168,"uuid":"9146732","full_name":"litejs/natural-compare-lite","owner":"litejs","description":"Compare strings containing a mix of letters and numbers in the way a human being would in sort order.","archived":false,"fork":false,"pushed_at":"2024-10-11T10:25:44.000Z","size":56,"stargazers_count":112,"open_issues_count":0,"forks_count":7,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-06T07:06:01.984Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/litejs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"lauriro"}},"created_at":"2013-04-01T12:23:47.000Z","updated_at":"2025-04-28T10:13:30.000Z","dependencies_parsed_at":"2024-02-26T01:49:25.400Z","dependency_job_id":"00a3f311-1de2-47e9-a679-67a71d1c457f","html_url":"https://github.com/litejs/natural-compare-lite","commit_stats":{"total_commits":57,"total_committers":4,"mean_commits":14.25,"dds":"0.052631578947368474","last_synced_commit":"6b42bc713dca62f35b927cd06b69a82e297f019b"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litejs%2Fnatural-compare-lite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litejs%2Fnatural-compare-lite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litejs%2Fnatural-compare-lite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litejs%2Fnatural-compare-lite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/litejs","download_url":"https://codeload.github.com/litejs/natural-compare-lite/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252896047,"owners_count":21821242,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-12-02T07:31:22.288Z","updated_at":"2025-05-16T04:03:40.079Z","avatar_url":"https://github.com/litejs.png","language":"JavaScript","funding_links":["https://github.com/sponsors/lauriro","https://www.buymeacoffee.com/lauriro"],"categories":[],"sub_categories":[],"readme":"\n[1]: https://badgen.net/coveralls/c/github/litejs/natural-compare-lite\n[2]: https://coveralls.io/r/litejs/natural-compare-lite\n[3]: https://badgen.net/packagephobia/install/natural-compare-lite\n[4]: https://packagephobia.now.sh/result?p=natural-compare-lite\n[5]: https://badgen.net/badge/icon/Buy%20Me%20A%20Tea/orange?icon=kofi\u0026label\n[6]: https://www.buymeacoffee.com/lauriro\n\n\n\nNatural Compare \u0026ndash;  [![Coverage][1]][2] [![size][3]][4] [![Buy Me A Tea][5]][6]\n===============\n\nCompare strings containing a mix of letters and numbers\nin the way a human being would in sort order.\nThis is described as a \"natural ordering\".\n\n```text\nStandard sorting:   Natural order sorting:\n    img1.png            img1.png\n    img10.png           img2.png\n    img12.png           img10.png\n    img2.png            img12.png\n```\n\nString.naturalCompare returns a number indicating\nwhether a reference string comes before or after or is the same\nas the given string in sort order.\nUse it with builtin sort() function.\n\n\n\n### Installation\n\n- In browser\n\n```html\n\u003cscript src=natural-compare.js\u003e\u003c/script\u003e\n```\n\n- In node.js: `npm install natural-compare-lite`\n\n```javascript\nvar naturalCompare = require(\"natural-compare-lite\")\n```\n\n### Usage\n\n```javascript\n// Simple case sensitive example\nvar a = [\"z1.doc\", \"z10.doc\", \"z17.doc\", \"z2.doc\", \"z23.doc\", \"z3.doc\"];\na.sort(String.naturalCompare);\n// [\"z1.doc\", \"z2.doc\", \"z3.doc\", \"z10.doc\", \"z17.doc\", \"z23.doc\"]\n\n// Use wrapper function for case insensitivity\na.sort(function(a, b){\n  return String.naturalCompare(a.toLowerCase(), b.toLowerCase());\n})\n\n// In most cases we want to sort an array of objects\nvar a = [ {\"street\":\"350 5th Ave\", \"room\":\"A-1021\"}\n        , {\"street\":\"350 5th Ave\", \"room\":\"A-21046-b\"} ];\n\n// sort by street, then by room\na.sort(function(a, b){\n  return String.naturalCompare(a.street, b.street) || String.naturalCompare(a.room, b.room);\n})\n\n// When text transformation is needed (eg toLowerCase()),\n// it is best for performance to keep\n// transformed key in that object.\n// There are no need to do text transformation\n// on each comparison when sorting.\nvar a = [ {\"make\":\"Audi\", \"model\":\"A6\"}\n        , {\"make\":\"Kia\",  \"model\":\"Rio\"} ];\n\n// sort by make, then by model\na.map(function(car){\n  car.sort_key = (car.make + \" \" + car.model).toLowerCase();\n})\na.sort(function(a, b){\n  return String.naturalCompare(a.sort_key, b.sort_key);\n})\n```\n\n- Works well with dates in ISO format eg \"Rev 2012-07-26.doc\".\n\n\n### Custom alphabet\n\nIt is possible to configure a custom alphabet\nto achieve a desired order.\n\n```javascript\n// Estonian alphabet\nString.alphabet = \"ABDEFGHIJKLMNOPRSŠZŽTUVÕÄÖÜXYabdefghijklmnoprsšzžtuvõäöüxy\"\n[\"t\", \"z\", \"x\", \"õ\"].sort(String.naturalCompare)\n// [\"z\", \"t\", \"õ\", \"x\"]\n\n// Russian alphabet\nString.alphabet = \"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя\"\n[\"Ё\", \"А\", \"Б\"].sort(String.naturalCompare)\n// [\"А\", \"Б\", \"Ё\"]\n```\n\n\n## External links\n\n[GitHub repo](https://github.com/litejs/natural-compare-lite) |\n[npm package](https://npmjs.org/package/natural-compare-lite)\n\n\n## Licence\n\nCopyright (c) 2012-2022 Lauri Rooden \u0026lt;lauri@rooden.ee\u0026gt;  \n[The MIT License](http://lauri.rooden.ee/mit-license.txt)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flitejs%2Fnatural-compare-lite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flitejs%2Fnatural-compare-lite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flitejs%2Fnatural-compare-lite/lists"}