34 lines
963 B
JavaScript
34 lines
963 B
JavaScript
|
"use strict";
|
||
|
|
||
|
const vowels = "aeiou".split("");
|
||
|
const consonants = "bcdfghjklmnpqrstvwxyz".split("");
|
||
|
|
||
|
function random_item(arr) {
|
||
|
return arr[Math.floor(Math.random() * arr.length)];
|
||
|
}
|
||
|
|
||
|
export default function(word) {
|
||
|
console.log(`***** MUTATE *****`)
|
||
|
const chars = word.toLowerCase().split("");
|
||
|
const targetpos = Math.floor(Math.random() * word.length);
|
||
|
const targetchar = chars[targetpos];
|
||
|
console.log("TARGET", targetchar, "POS", targetpos);
|
||
|
let pool = consonants.concat(vowels);
|
||
|
if(vowels.includes(targetchar))
|
||
|
pool = vowels;
|
||
|
if(consonants.includes(targetchar))
|
||
|
pool = consonants;
|
||
|
|
||
|
pool = [...pool]; // Shallow copy to avoid splice mutating the original array
|
||
|
console.log("POOL BEFORE", pool);
|
||
|
if(pool.includes(targetchar)) {
|
||
|
console.log("REMOVING TARGET");
|
||
|
pool.splice(pool.indexOf(targetchar), 1);
|
||
|
}
|
||
|
console.log("POOL AFTER", pool);
|
||
|
|
||
|
let newchar = random_item(pool);
|
||
|
chars.splice(targetpos, 1, newchar);
|
||
|
return chars.join("");
|
||
|
}
|