{"id":22900284,"url":"https://github.com/zeroboo/nodejs-random-selector","last_synced_at":"2025-05-08T01:12:28.186Z","repository":{"id":33590579,"uuid":"159777829","full_name":"zeroboo/nodejs-random-selector","owner":"zeroboo","description":"A nodejs module for randomly select elements.","archived":false,"fork":false,"pushed_at":"2023-01-06T05:20:26.000Z","size":1774,"stargazers_count":8,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-23T23:02:32.723Z","etag":null,"topics":["javascript","node-js","nodejs","random","random-collection","random-sampling","randomize","randomness"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zeroboo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-30T06:20:49.000Z","updated_at":"2023-03-10T07:08:54.000Z","dependencies_parsed_at":"2023-01-15T01:33:15.473Z","dependency_job_id":null,"html_url":"https://github.com/zeroboo/nodejs-random-selector","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeroboo%2Fnodejs-random-selector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeroboo%2Fnodejs-random-selector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeroboo%2Fnodejs-random-selector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeroboo%2Fnodejs-random-selector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zeroboo","download_url":"https://codeload.github.com/zeroboo/nodejs-random-selector/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252399538,"owners_count":21741670,"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":["javascript","node-js","nodejs","random","random-collection","random-sampling","randomize","randomness"],"created_at":"2024-12-14T01:18:44.210Z","updated_at":"2025-05-08T01:12:28.163Z","avatar_url":"https://github.com/zeroboo.png","language":"JavaScript","readme":"\r\n\r\n# random-selector\r\n\r\nA nodejs module for randomly selecting objects\r\n\r\n\r\n# Status\r\n\r\n[![NPM](https://nodei.co/npm/random-selector.png?downloads=true\u0026downloadRank=true\u0026stars=true)](https://nodei.co/npm/random-selector/)\r\n\r\n\r\n![CircleCI](https://circleci.com/gh/zeroboo/nodejs-random-selector.svg?style=svg)\r\n![travis-ci](https://travis-ci.org/zeroboo/nodejs-random-selector.svg?branch=master)\r\n[![Coverage Status](https://coveralls.io/repos/github/zeroboo/nodejs-random-selector/badge.svg?branch=master)](https://coveralls.io/github/zeroboo/nodejs-random-selector?branch=master)\r\n![Downloads](https://img.shields.io/npm/dt/random-selector.svg)\r\n\r\n# Features\r\n- Selecting objects with \u0026 without replacement \r\n- Select objects with different frequencies\r\n\r\n# Build\r\n\r\nOn project folder run\r\n```npm\r\nnpm install\r\n```\r\nRun tests\r\n```npm\r\nnpm test\r\n```\r\nRun demo\r\n```npm\r\nnpm start\r\n```\r\n\r\n\r\n# Usage\r\n\r\n### Install to your project:\r\n```npm\r\nnpm install random-selector\r\n```\r\n\r\n### Require the selector factory\r\n```javascript\r\nconst selectorFactory = require(\"random-selector\");\r\n```\r\n\r\n### Examples of creating selectors\r\n    \r\n1. Blindly pick out balls in a bag without returning\r\n```javascript\r\nvar normalBag = selectorFactory.createSimpleSelectorWithoutReplacement([\r\n    {color:'red'}, \r\n    {color:'black'}, \r\n]);\r\nconsole.log(\"Selected ball: \", normalBag.select());\r\nconsole.log(\"Selected ball: \", normalBag.select());\r\nconsole.log(\"Bag now empty, you've got no balls to select: \", normalBag.select());\r\n```\r\n\r\n2. Blindly pick out balls in a bag then return to the bag\r\n```javascript\r\nvar magicBag = selectorFactory.createSimpleSelectorWithReplacement([\r\n    {color:'red', id:'left'}, \r\n    {color:'black', id:'right'}, \r\n]);\r\nconsole.log(\"Ball checked: \", magicBag.select());\r\nconsole.log(\"Ball checked: \", magicBag.select());\r\nconsole.log(\"Still have balls: \", magicBag.select());\r\n```\r\n\r\n3. [Flipping an unbiased coin](https://en.wikipedia.org/wiki/Coin_flipping)\r\n```javascript\r\nvar chigurhCoin = selectorFactory.createSimpleSelectorWithReplacement(['Head', 'Tail']);\r\nconsole.log(\"The most you ever lost in a coin toss? \", chigurhCoin.select());\r\n```\r\n    \r\n4. Simulating rolling dice\r\n```javascript\r\nvar dice = selectorFactory.createSimpleSelectorWithReplacement([1, 2, 3, 4, 5, 6]);\r\nvar points = Array();\r\nfor(let i = 0;i\u003c10;i++)\r\n{\r\n    points.push(dice.select());\r\n}\r\nconsole.log(\"Total points after 10 rolls: \", points);\r\n```\r\n\r\n5. [daisy meter: a interpersonal relationship evaluation tool bases on nature](https://en.wikipedia.org/wiki/He_loves_me..._he_loves_me_not)\r\n```javascript\r\nvar daisy = selectorFactory.createSimpleSelectorWithoutReplacement([]);\r\nfor(let i=0;i \u003c daisy.getRandomer().getRandomIntBetween(4, 8);i++)\r\n{\r\n    daisy.getElements().push('petal');\r\n}\r\nvar meter = true;\r\nwhile(daisy.select()!=null)\r\n{\r\n    meter = !meter;\r\n    console.log(meter?'He loves me':'He loves me not');\r\n}\r\nif(!meter){\r\n    console.log(\"He fuckin' hates me, try another daisy!\");\r\n}\r\n\r\n```    \r\n\r\n6. Simulating wheel of fortune:\r\n![Image Wheel of Fortune](./doc/img/wheel_fortune.jpg)\r\n```javascript\r\nvar fortuneWheel = selectorFactory.createFrequencySelectorWithReplacement(\r\n    [['1000$', 10]\r\n        , ['750$', 10]\r\n        , ['150$', 10]\r\n        , ['400$', 10]\r\n        , ['250$', 10]\r\n        , ['800$', 10]\r\n        , ['100$', 10]\r\n        , ['450$', 10]\r\n        , ['300$', 10]\r\n        , ['600$', 10]\r\n        , ['200$', 10]\r\n        , ['350$', 10]\r\n    ] ///Total frequency is 120\r\n);\r\nconsole.log(\"Prize: \", fortuneWheel.select());\r\n```    \r\n  \r\n```javascript\r\n///A cheated wheel with 0.5% chance to get 1000$, 50 % chance to get 10$, 49.5% to get stuck (return null)\r\nvar realWheel = selectorFactory.createFrequencySelectorWithReplacement(\r\n    [['1000$', 50]\r\n        , ['10$', 5000]\r\n    ]\r\n    , 10000 /*total frequency \u003e sum of all element's freequency: it means selecting may failed (return null)*/\r\n);\r\nconsole.log(\"Prize: \", realWheel.select());\r\n```\r\n\r\n    \r\n    \r\n    \r\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeroboo%2Fnodejs-random-selector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzeroboo%2Fnodejs-random-selector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeroboo%2Fnodejs-random-selector/lists"}