I am attempting to write a function that takes two arrays as inputs, representing the top and bottom halves of a deck of cards, and shuffles them together using recursion. I am attempting return a single array containing the elements from both input arrays interleaved, like so:
...etc.
I want to append any remaining elements to the end of the array.
This is how I solved it without recursion:
function shuffleCards(topHalf, bottomHalf) {
let returnArray = [];
for (let i = 0; i < Math.max(topHalf.length, bottomHalf.length); i++) {
if (topHalf[i]) {
returnArray.push(topHalf[i]);
}
if (bottomHalf[i]) {
returnArray.push(bottomHalf[i]);
}
}
return returnArray
}
and this is my attempt with recursion:
function shuffleCards(topHalf, bottomHalf) {
let results = [];
if (topHalf.length) {
results.push(topHalf[0]
}
if (bottomHalf.length) {
results.push(bottomHalf[0])
}
return results.concat(shuffleCards(topHalf.slice(1), bottomHalf.slice(1)));
}
I keep getting the syntax error "missing ) after argument list" but I am fairly certain all of the parenthesis are in the write place.
Any tips?
Thanks!
Beside missing parenthesis, you could take only the first item from the first half and call the function with swapped arrays.
function shuffleCards([value, ...topHalf], bottomHalf) { return value === undefined ? [] : [value, ...shuffleCards(bottomHalf, topHalf)]; } console.log(...shuffleCards([1, 2, 3, 4], [5, 6, 7, 8]));
function shuffleCards(topHalf, bottomHalf,results = []) {
if(topHalf.length===0&&bottomHalf.length===0)return results;
if (topHalf.length!==0) {
results.push(topHalf[0])
}
if (bottomHalf.length!==0) {
results.push(bottomHalf[0])
}
return shuffleCards(topHalf.slice(1), bottomHalf.slice(1),results);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.