导语
这是我大四时去面试前端实习工作的时候,某家公司给的笔试题。虽然是挂了,但是也学到了很多。
题目如标题,实际答案在动物书<<重构Javascript>>中,当时我也没有写过有关卡牌的算法,就随便写了一个从A-K的13张牌的卡组抽取5张出来。毕竟没领会这道题的题意。
时隔一年,写一下这道题目。
卡牌
一副卡牌有 1~K
13张,每张卡牌有四种颜色,分别是 H、S、D、C
,我们用 2-H
表示一张牌,则一副完整的卡牌数组应该有52张牌
可以得到卡牌数组方法为
function buildCards(){
const values = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
const suits = ["H", "S", "D", "C"];
const cards = []
values.forEach(value=>{
suits.forEach(suit=>{
cards.push(`${value}-${suit}`)
})
})
return cards
}
接下来,我们写获取随机5张卡牌的方法
function randomCards() {
const cardArray = buildCards()
const cards = []
const deckSize = cardArray.length
cards.push(cardArray.splice(Math.floor(Math.random() *deckSize),1)[0])
cards.push(cardArray.splice(Math.floor(Math.random() *deckSize),1)[0])
cards.push(cardArray.splice(Math.floor(Math.random() *deckSize),1)[0])
cards.push(cardArray.splice(Math.floor(Math.random() *deckSize),1)[0])
cards.push(cardArray.splice(Math.floor(Math.random() *deckSize),1)[0])
return cards
}
注意 : 这里使用了splice方法切割数组,确保随机手牌集合的互异性。
Math.random
这个是一个重要的数学方法,用于获取 0~1的随机数,以下是一个常常考的笔试题。
用 js 实现随机选取 10–100 之间的 10 个数字, 存入一个数组, 并排序。
Math.random() // 返回0~1的随机数
Math.random() * 5 // 则返回 0~5的随机数
// 要想获取某个返回的随机数,可以
function getRandom(x,y){
return Math.floor( Math.random() * (y-x+1) + x)
}
for(var i=0; i<10; i++){
var result= getRandom(10,100);
iArray.push(result);
}
iArray.sort();
网友评论