Javascript 如何比较两种不同状态下的数组对象

Javascript 如何比较两种不同状态下的数组对象,javascript,reactjs,Javascript,Reactjs,我想比较两种不同状态下的对象数组。我的状态值如下所示: 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},{

我想比较两种不同状态下的对象数组。我的状态值如下所示:

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> 
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==“是”),null)
约翰:{ismanger.count},瑟琳娜:{ismanager.count},彼得:{ismanager.count}

您可以直接计算具有该条件的经理

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')),新映射),
([name,count])=>({name,count})
);

控制台日志(计数)我想我们只需要重新检查一下数组,对吗? 试试这个

演示地点:


你想从
review1
经理数吗?我想从review2数数,为什么不从
review2
数数呢?确切地说,我是从
review2
数数的,但我不知道如何才能做到这一点。这是可行的,但如果我确实有多人拥有经理,那么在我的情况下就不行了。类似于下面的“`var review2=[{personName:'John',ismanager:'yes'},{name:'Peter',ismanager:'no'},`code>{personName:'Serena',ismanager:'yes'}]
count=review2.reduce((s,{ismanager})=>s+(ismanager='yes'),0);console.log(count)
那么想要的值是什么?我想要每个人都有单独的值。约翰伯爵是1。Serena的计数是1,Peter的计数是0我已经更新了帖子,所以是的,我对少数人多次使用相同的经理值ismanager=“是”
review2 = [{personName: 'John', ismanager: 'yes'}, {name: 'Peter', ismanager: 'no'}, {personName: 'Serena', ismanager: 'yes'},{personName: 'John', ismanager:'yes'}]

const countMap = review2.reduce((accum, person) => {
  const isPersonName = !!person.personName;
  const name = isPersonName ? person.personName : person.name;
  if (accum[name] && person.ismanager === 'yes') {
    accum[name]++;
  } else if (person.ismanager === 'yes') {
    accum[name] = 1;
  }

  return accum;
}, {})

console.log(countMap);