【发布时间】:2017-05-05 03:31:45
【问题描述】:
在我的扑克应用程序中,我有一组手牌,每手牌都是随机选择的具有价值和花色的卡片对象数组:
[ [ { value: 5, suit: 's' },
{ value: 4, suit: 's' },
{ value: 6, suit: 'c' },
{ value: 11, suit: 'd' },
{ value: 12, suit: 'c' } ],
[ { value: 9, suit: 'd' },
{ value: 12, suit: 'h' },
{ value: 8, suit: 'c' },
{ value: 12, suit: 's' },
{ value: 2, suit: 's' } ],
[ { value: 4, suit: 'h' },
{ value: 6, suit: 's' },
{ value: 10, suit: 'c' },
{ value: 3, suit: 'd' },
{ value: 7, suit: 'd' } ] ]
为了准备手部进行评估,我想使用 Array.reduce 返回手部对象数组。所以输出将是:
[
{
values: [5, 4, 6, 11, 12],
suits: ['s', 's', 'c', 'd', 'c']
},
{
values: [9, 12, 8, 12, 2],
suits: ['d', 'h', 'c', 's', 's']
},
{
values: [4, 6, 10, 3, 7],
suits: ['h', 's', 'c', 'd', 'd']
}
]
我尝试使用嵌套的 forEach 来实现它,但它失败了,我不知道为什么。我有两个console.log,其中的输出符合预期,但最终手与输入相同。
let temp = []
hands.forEach((el) => {
temp = el
el = {}
el.values = []
el.suits = []
console.log(el) //expected output
temp.forEach((obj) => {
el.values.push(obj.value)
el.suits.push(obj.suit)
console.log(el) //expected output
})
})
console.log(hands) //same as original
【问题讨论】:
-
"我想使用 reduce" ...那么您的代码在哪里尝试这样做?这不是代码编写服务。此网站的工作原理是您发布 您的代码 无法按预期工作,人们会帮助您解决该问题
-
我进行了代码尝试,但我认为它们对发布没有帮助,因为似乎任何有效的答案都将完全重写我的实现。不过,公平的批评,我会记住的。
-
但是您也错过了从错误中吸取教训的要点。 授人以鱼,或授人以渔
-
为什么必须使用
reduce来完成这项工作?使用forEach似乎会更简单。 -
el是函数的局部变量,每次通过forEach循环它都会重置为{}。你的代码永远不会修改hands。
标签: javascript arrays functional-programming poker