« get me outta code hell

Merge branch 'main' into merge-socket-mtui - mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
path: root/general-util.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2024-05-16 22:41:33 -0300
committer(quasar) nebula <qznebula@protonmail.com>2024-05-16 22:41:33 -0300
commitcd91ccbea9e76ee1de1e3cbcfe17d8a2cb6ef9b4 (patch)
treed98e0b2a100170c7f913da57fb8e010c4b581603 /general-util.js
parent2a270f20cc8e2f2a0754d28d6892bb1bd27e45ce (diff)
parenteb6a997df675fc8176fb15f34450a0c1b8416edc (diff)
Merge branch 'main' into merge-socket-mtui merge-socket-mtui
So we made this merge commit *after* going through a whole
fidanglin' bunch of steps to flat-out rebase socket-mtui...
but of course, that was pretty hopeless from the start to
get just quite right. After all, we didn't know the exact
point of each commit and how to test out the changes, so
we couldn't make sure all our rebased commits were working
the same way. (This is maybe the single coolest reason to
make sure that automated tests *pass with 100% coverage
at every commit*, but obviously this project doesn't have
that. Alas!)

This merge commit follows up a different merge commit we
actually made almost exactly one year ago to this day
(also: our birthday LOL). We figure the testing done at
that point was quite a bit more thorough than we'd do
today, and anyway there's little reason to repeat the
work we did in that commit. Comparatively, this merge
commit is way smaller!

It was still fun to go through the whole rebasing
process, even if it didn't practically bring us
anywhere. You know, assuming the merge commit from
last year didn't accidentally destroy any code or
todos lol........ *prays* ^____^
Diffstat (limited to 'general-util.js')
-rw-r--r--general-util.js12
1 files changed, 9 insertions, 3 deletions
diff --git a/general-util.js b/general-util.js
index d369848..78843f9 100644
--- a/general-util.js
+++ b/general-util.js
@@ -78,7 +78,7 @@ export function downloadPlaylistFromOptionValue(arg) {
   }
 }
 
-export function shuffleArray(array) {
+export function shuffleArray(array, limit = array.length) {
   // Shuffles the items in an array. Returns a new array (does not modify the
   // passed array). Super-interesting post on how this algorithm works:
   // https://bost.ocks.org/mike/shuffle/
@@ -86,10 +86,12 @@ export function shuffleArray(array) {
   const workingArray = array.slice(0)
 
   let m = array.length
+  let n = limit
 
-  while (m) {
+  while (n) {
     let i = Math.floor(Math.random() * m)
     m--
+    n--
 
     // Stupid lol; avoids the need of a temporary variable!
     Object.assign(workingArray, {
@@ -98,7 +100,11 @@ export function shuffleArray(array) {
     })
   }
 
-  return workingArray
+  if (limit === array.length) {
+    return workingArray
+  } else {
+    return workingArray.slice(0, limit)
+  }
 }
 
 export function throttlePromise(maximumAtOneTime = 10) {