This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = randSplit; | |
function randSplit(_ary, _percentageSplit) { | |
// make sure the params are arrays | |
if(!Array.isArray(_ary) || !Array.isArray(_percentageSplit)) { | |
console.log(`Both arguments must be of array type`); | |
return false; | |
} | |
// indeed, logicaly this sum of percentage split should be 100 | |
if(_percentageSplit.reduce((a, b) => a + b, 0) != 100) { | |
console.log(`Sum of elements of _percentageSplit must be 100, but is `,_percentageSplit.reduce((a, b) => a + b, 0).toString()); | |
return false; | |
} | |
// because we don't want to modify the original array | |
_ary = JSON.parse(JSON.stringify(_ary)); | |
// we will populate result object for response | |
let result = {}; | |
let eleSplit = [] | |
for (let i in _percentageSplit) { | |
let eleInThisAry = parseInt(_ary.length*_percentageSplit[i]/100); | |
console.log(`${eleInThisAry.toString()} (${_percentageSplit[i]}% of ${_ary.length}) elements in ${i} object`); | |
eleSplit.push(eleInThisAry); | |
} | |
for (let i in _percentageSplit) { | |
result[i] = []; | |
while(result[i].length != eleSplit[i]){ | |
result[i].push(_ary.splice(Math.floor(Math.random()*_ary.length), 1)[0]) | |
} | |
} | |
return result | |
}; | |
/* TEST */ | |
/* | |
let res1 = randSplit([1,2,3,4,5,6,7,8,9,10], [20,30,5]); | |
// should return false : sum of 2nd argument is not 100 | |
console.log("res1:: ", res1); | |
let res2 = randSplit("[1,2,3,4,5,6,7,8,9,10]", [20,30,50]); | |
// should return false : first argument is not an array | |
console.log("res2:: ", res2); | |
let res3 = randSplit([1,2,3,4,5,6,7,8,9,10], [20,30,50]); | |
// should return proper response | |
console.log("res3:: ", res3); | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment