javascript - 如何比较存在于两种不同 React 状态的数组对象
问题描述
我想比较两种不同 React 状态下的对象数组。我的状态值如下所示:
review1 = [{name: John, Title: Manager},{name: Peter, Title: Engineer}, {name: Serena, Title: Supervisor}]
review2 = [{personName: John, ismanager: yes}, {name: Peter, ismanager: no}, {personName: Serena, ismanager: yes},{personName: John, ismanager:yes}]
现在我想统计一下担任经理的人数。如果多个,则计数应增加。在这种情况下,约翰是两个职位的经理,那么约翰的人数是 2,彼得 0 和塞雷娜 1
我正在尝试以下功能,但它没有按预期工作。
let filter = this.state.review1.map(elem=>elem.personName)
count = this.state.review2.map(data=> data.name).reduce((n,x) =>n +(x === filter.personName && data.ismanager === "yes"),null)
<div> John: {ismanger.count}, Serena: {ismanager.count}, Peter: {ismanager.count} </div>
解决方案
你可以直接算有条件的经理。
var review2 = [{ personName: 'John', ismanager: 'yes' }, { personName: 'Peter', ismanager: 'no' }, { personName: 'Serena', ismanager: 'yes' }, { personName: 'John', ismanager: 'yes' }],
count = Array.from(
review2.reduce((m, { personName, ismanager }) => m.set(personName, (m.get(personName) || 0) + (ismanager === 'yes')), new Map),
([name, count]) => ({ name, count })
);
console.log(count);
推荐阅读
- php - If Conditional 有两个角色
- bash - 在脚本中使用 telnet 命令发送邮件
- c# - 如何在 C# 中不获取不必要的剪贴板更新
- c - 从管道中的进程传递整数数组
- ffmpeg - FFprobe 输出中的“has_b_frames”是什么意思?
- highcharts - Highmaps 钻取和不一致样式的工具提示?
- php - php发送的电子邮件标题中的特殊字符
- java - 配置 log4j2 为不同的包有不同的日志级别
- javascript - 我怎样才能在这里触发 popstate 事件?
- swift - 有人可以帮我阻止 arc4random 生成的数字再次出现吗?