gpt4 book ai didi

javascript - 我可以在 javascript 中不使用循环的情况下重复对象数组中的值 n 次吗?

转载 作者:行者123 更新时间:2023-11-28 17:59:31 25 4
gpt4 key购买 nike

我正在学习函数式编程,并且我正在尽可能避免循环,但我在填充数组时遇到了一些问题。我正在学习 mapsortreduce 的基础知识,但我无法在以下代码中应用其中任何一个:

function generateDecks(amount){
//the set of cards
var cards = [
{suit:"spades",value:"2"},
{suit:"spades",value:"3"},
{suit:"spades",value:"4"},
{suit:"spades",value:"5"},
{suit:"spades",value:"6"},
{suit:"spades",value:"7"},
{suit:"spades",value:"8"},
{suit:"spades",value:"9"},
{suit:"spades",value:"10"},
{suit:"spades",value:"jack"},
{suit:"spades",value:"queen"},
{suit:"spades",value:"king"},
{suit:"spades",value:"ace"},
{suit:"hearts",value:"2"},
{suit:"hearts",value:"3"},
{suit:"hearts",value:"4"},
{suit:"hearts",value:"5"},
{suit:"hearts",value:"6"},
{suit:"hearts",value:"7"},
{suit:"hearts",value:"8"},
{suit:"hearts",value:"9"},
{suit:"hearts",value:"10"},
{suit:"hearts",value:"jack"},
{suit:"hearts",value:"queen"},
{suit:"hearts",value:"king"},
{suit:"hearts",value:"ace"},
{suit:"clouds",value:"2"},
{suit:"clubs",value:"3"},
{suit:"clubs",value:"4"},
{suit:"clubs",value:"5"},
{suit:"clubs",value:"6"},
{suit:"clubs",value:"7"},
{suit:"clubs",value:"8"},
{suit:"clubs",value:"9"},
{suit:"clubs",value:"10"},
{suit:"clubs",value:"jack"},
{suit:"clubs",value:"queen"},
{suit:"clubs",value:"king"},
{suit:"clubs",value:"ace"},
{suit:"diamonds",value:"2"},
{suit:"diamonds",value:"3"},
{suit:"diamonds",value:"4"},
{suit:"diamonds",value:"5"},
{suit:"diamonds",value:"6"},
{suit:"diamonds",value:"7"},
{suit:"diamonds",value:"8"},
{suit:"diamonds",value:"9"},
{suit:"diamonds",value:"10"},
{suit:"diamonds",value:"jack"},
{suit:"diamonds",value:"queen"},
{suit:"diamonds",value:"king"},
{suit:"diamonds",value:"ace"}
];
var deck = [];

//here it's the loop
for (var i = 0; i < amount; i++){
deck = deck.concat(cards);
}
}

我想在不使用任何循环的情况下这样做,这可能吗?

最佳答案

Can I repeat the values in an array of objects n times without using loop in javascript?

您只是在寻找 Array.fill

let x = Array(5).fill('a')
console.log(x)
// [ 'a', 'a', 'a', 'a', 'a' ]

您还可以使用 Array.from

let K = x => y => x
let x = Array.from(Array(5), K('a'))
console.log(x)
// [ 'a', 'a', 'a', 'a', 'a' ]

<小时/>

尽管有些人可能会说,JavaScript 对于函数式编程来说非常棒

const rand = x => Math.floor(Math.random() * x)

const suits = ['♤', '♡', '♧', '♢']

const ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']

const Card = id => ({
id,
suit: suits[id % suits.length],
rank: ranks[id % ranks.length],
})

const Deck = (suits, ranks) =>
Array.from(Array(suits.length * ranks.length), (_,id) => Card(id))

Deck.deal = n => d =>
[d.slice(0,n), d.slice(n)]

Deck.print = d =>
console.log(d.map(({rank, suit}) => `${rank}${suit}`).join(','))

// create a new deck, d
const d = Deck(suits, ranks)

// deal a new hand of 5 cards, get a new deck back with the 5 cards removed
let [newHand, newDeck] = Deck.deal(5) (d)

Deck.print(newHand) // A♤,2♡,3♧,4♢,5♤
Deck.print(newDeck) // 6♡,7♧,8♢,9♤,10♡,J♧,Q♢,K♤,A♡,2♧,3♢,4♤,5♡,6♧,7♢,8♤,9♡,10♧,J♢,Q♤,K♡,A♧,2♢,3♤,4♡,5♧,6♢,7♤,8♡,9♧,10♢,J♤,Q♡,K♧,A♢,2♤,3♡,4♧,5♢,6♤,7♡,8♧,9♢,10♤,J♡,Q♧,K♢

<小时/>

添加一个很酷的洗牌功能什么的

Deck.shuffle = d => {
let acc = []
for (let i = 0, j; j = rand(i), i < d.length; acc[j] = d[i], i++)
if (j !== i)
acc[i] = acc[j]
return acc
}

// make a new Deck and shuffle it
const d = Deck.shuffle(Deck(suits, ranks))

// same demo as last time
let [newHand, newDeck] = Deck.deal(5) (d)

Deck.print(newHand) // 8♡,9♡,3♤,9♧,K♢
Deck.print(newDeck) // 9♤,10♤,A♡,K♡,J♢,8♧,J♧,7♤,9♢,6♡,4♤,5♡,7♢,2♤,2♧,6♢,2♢,2♡,3♢,10♢,5♤,Q♡,J♡,6♤,5♢,K♤,3♡,10♧,4♧,Q♧,7♡,10♡,A♢,8♢,8♤,4♢,J♤,K♧,Q♢,Q♤,A♧,6♧,3♧,4♡,A♤,5♧,7♧

关于javascript - 我可以在 javascript 中不使用循环的情况下重复对象数组中的值 n 次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com