Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.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 使用map和reduce获取对象数组_Javascript_Functional Programming_Ecmascript 6 - Fatal编程技术网

Javascript 使用map和reduce获取对象数组

Javascript 使用map和reduce获取对象数组,javascript,functional-programming,ecmascript-6,Javascript,Functional Programming,Ecmascript 6,我有一系列的 var c = [{name: 'John'}, {name: 'John'}, {name: 'Tom'}]; 我想使用reduce方法和map来获得以下结果: result = [ { name: "John", occurence: 2 }, { name: "Tom", occurence: 1 } ] 这里有一个尝试,我已经尝试过,但仍然没有完全得到它 c=[{ 名字:“约翰” }, { 名字:“约翰” }, { 姓名:“西蒙” }]; 变量d=

我有一系列的

var c = [{name: 'John'}, {name: 'John'}, {name: 'Tom'}];
我想使用reduce方法和map来获得以下结果:

result = [
    { name: "John", occurence: 2 },
    { name: "Tom", occurence: 1 }
  ]
这里有一个尝试,我已经尝试过,但仍然没有完全得到它

c=[{
名字:“约翰”
}, {
名字:“约翰”
}, {
姓名:“西蒙”
}];
变量d=c.reduce((countMap,word)=>{
countMap[word.name]=++countMap[word.name]| 1;
返回计数图
}, []);
变量e=c.reduce((countMap,word)=>{
q=[];
countMap[word.name]=++countMap[word.name]| 1;
var p={
name:word.name,
发生:countMap[单词.名称]
}
q、 推(p);
返回q
}, []);

控制台日志(e)使用reduce肯定是正确的,但我会将计算分为两个不同的步骤

让c=[{name:'John'},{name:'John'},{name:'Tom'}];
const pairs=o=>Object.keys(o.map)(k=>[k,o[k]])
让count=c.reduce((acc,{name})=>{
if(acc[名称]==未定义)
返回Object.assign(acc,{[name]:1})
其他的
返回Object.assign(acc,{[name]:acc[name]+1})
}, {})
var result=pairs(count).map(([name,occurrences])=>({name,occurrences}))
console.log(结果)

//=>[{name:'John',occurrences:2},{name:'Tom',occurrences:1}]
使用reduce肯定是正确的,但我会将计算分为两个不同的步骤

让c=[{name:'John'},{name:'John'},{name:'Tom'}];
const pairs=o=>Object.keys(o.map)(k=>[k,o[k]])
让count=c.reduce((acc,{name})=>{
if(acc[名称]==未定义)
返回Object.assign(acc,{[name]:1})
其他的
返回Object.assign(acc,{[name]:acc[name]+1})
}, {})
var result=pairs(count.map)([name,currence])=>({name,currence}))
console.log(结果)

//=>[{name:'John',出现次数:2},{name:'Tom',出现次数:1}]
你忘了发布尝试了吗?@AndrewL。谢谢刚刚编辑了question@mike-c我的JSFIDLE中现在的运行似乎不起作用了。@JoeSaad你是什么意思,为什么打我?我根本没有修改你的JSFIDLE代码。我只是把它复制到你问题的一个可运行的片段中。你忘了发布这个尝试了吗?@AndrewL。谢谢刚刚编辑了question@mike-c我的JSFIDLE中现在的运行似乎不起作用了。@JoeSaad你是什么意思,为什么打我?我根本没有修改你的JSFIDLE代码。我只是把它复制到你的问题里面的一个可运行的片段中。这确实有效。谢谢@naomik,我仍在努力理解为什么我们有常数对。我们没有使用它。我也不知道第二种方法。再次感谢!我们肯定是在使用it
配对
;仔细阅读代码。第二部分的意思是建议您将这些内容封装在函数中,这样就不会使代码的其余部分变得混乱。我在这里添加了一些注释,还添加了第三部分,展示了如何使用更具语义的数据结构进行相同的计算。这确实有效。谢谢@naomik,我仍在努力理解为什么我们有常数对。我们没有使用它。我也不知道第二种方法。再次感谢!我们肯定是在使用it
配对
;仔细阅读代码。第二部分的意思是建议您将这些内容封装在函数中,这样就不会使代码的其余部分变得混乱。我在这里添加了一些注释,还添加了第三部分,展示了如何使用更具语义的数据结构进行相同的计算。