Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Array.reduce多维数组上的对象数组_Javascript_Arrays_Functional Programming_Poker - Fatal编程技术网

Javascript Array.reduce多维数组上的对象数组

Javascript Array.reduce多维数组上的对象数组,javascript,arrays,functional-programming,poker,Javascript,Arrays,Functional Programming,Poker,在我的扑克牌应用程序中,我有一个手牌数组,每只手牌都是随机选择的具有值和套装的卡对象数组: [ [ { 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: 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,其中的输出与预期的一样,但最终hands与输入相同

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

这是一个使用嵌套的
Array.prototype.reduce
函数的解决方案:

[代码>var数组<<代码>var数组=[{{{{{值:5,西服:5,西服:''s},{{{值:5,西服:5,西服:5,西服:'5,西服:'''''''s},{{值:5,{{{值:5,价值:5,西服:5,西服:'s},{{{值:6,西服:'c'},{{值:6,价值:6,价值:6,西服:{{{{{值:5,价值:11,西服服:'d},{{{{{值:11,西服:'d,{{{{{{{值:11,西服:'d,{{{{{{价值:11,西服:'d},,{{{{{{{{{价值:11,西服:'d,{{{{{{{value:7,suit:'d'}]]; var result=array.reduce(函数(p,c){ p、 推动(c.减少(功能a、b){ a、 值。推送(b值); a、 套装。推(b.套装); 返回a; },{values:[],suits:[]}); 返回p; },[]); 控制台日志(结果)
.as控制台包装{top:0;最大高度:100%!important;}
下面是一个使用
字符串concat
reduce
的简单解决方案。您可以尝试以下方法:

var reduced = []; 
//here a is your initial array
for(var i=0; i<a.length;i++){
    reduced.push(a[i].reduce(function(prev,curr){
        var obj={value:prev.value+','+curr.value,suit:prev.suit+','+curr.suit};return obj}));
}
console.log(reduced)
var reduced=[];
//这是您的初始数组

对于(var i=0;i您必须考虑输入数据(
data
)和输出(
data'
)的形状

注意1:1
HAND'
之间的关系,这意味着我们将使用
Array.prototype.map
进行一次转换。另一方面,
CARD
HAND'之间有N:1关系,因为我们将使用
Array.prototype.reduce
进行转换

因此,请记住,在我们工作时,我们将进行映射减少

const数据=
[{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'},
{值:2,suit:'s'}],
[{value:4,suit'h'},
{value:6,suit's'},
{value:10,suit'c'},
{value:3,suit'd'},
{value:7,suit'd'}]]
让输出=
data.map(卡片=>
减少({value,suit},{value,suit})=>({
值:[…值,值],
西服:[……西服,西服]
}),{值:[],适合:[]})

console.log(输出)
“我想使用reduce”…那么你的代码尝试在哪里?这不是一个代码编写服务。这个网站的工作原理是你发布的代码没有按预期工作,人们帮助你修复我尝试的代码,我不认为他们会有帮助,因为似乎任何有效的答案都是对我的实现的完全重写。公平的批评当然,我会记住这一点。但是你也没有从错误中吸取教训。给一个人一条鱼,或者教一个人钓鱼为什么必须使用
reduce
?使用
forEach
el
似乎更简单。el
是函数的一个局部变量,它被重置为
{}
每次通过
forEach
循环。你的代码从不修改
指针
。他希望结果中包含数组,而不是串联字符串。@Barmar感谢你的评论…编辑帖子以反映更改这是一个愚蠢的解决方案。既然你可以在第一步创建数组,为什么要创建一个字符串然后拆分成一个数组e?@Barmar这是一个公平的评论。请看编辑2,然后带上你得到的:D。。。
for(var i=0; i<a.length;i++){
    var tempElm =a[i].reduce(function(prev,curr) {
        var obj= {value:prev.value+','+curr.value,suit:prev.suit+','+curr.suit};return obj}); 
        tempElm['value'] = tempElm['value'].split();
        tempElm['suit']= tempElm['suit'].split();
        reduced.push(tempElm);
}
console.log(reduced)
var reduced = []; 
for(var i=0; i<a.length;i++){ 
    var valArray = []; var suitArray=[];
    var tempElm = a[i].reduce(function(prev,curr) {
        valArray.push(curr.value);suitArray.push(curr.suit);
        var obj= {value:valArray,suit:suitArray};
        return obj;
    },null); 
console.log(reduced)