首页 > 解决方案 > 在 Javascript 中创建计数器数组(反应原生)

问题描述

在我开始之前,我只想提一下,我已经有一个使用 reduce 创建计数器数组的代码,但有时我会遇到错误,我想知道是否还有其他方法

这是一个让我得到一个对象数组的查询:

const handleService = (bUID) => {
  const serviceListTmp = [];
  const  serviceCode = [];
  firebase.firestore().collection("users").doc(currentUser.uid).collection("my-appointments").where("businessId", "==", bUID).get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
      serviceListTmp.push(doc.data());
    })
    setServiceObj(serviceListTmp);
    console.log("Service Obj ", serviceObj);
  })
}

数据举例:

 Array [
    Object {
        "appointmentId": "fyeBbOtHkc1VIX9nZwqw",
        "businessId": "5x7bF6YEYpffHy1JGAcblHNyHiF2",
        "serviceId": "RIgpGFxnSncs3RzSjQTs",
        "serviceType": "Learn JavaScript",
        "voucherCode": "tzDah8Yu",
      }
// more data
]

我想做的是:

  1. 我想计算“serviceType”在数据中出现了多少次
  2. 之后我想检查哪个“serviceType”出现的最大次数和最少次数
  3. 然后,我想将“voucherCode”添加到匹配的“serviceType”中

想要的结果示例:

"Learn JavaScript" : "2"(counter) //Maximum used
"do something" : "1"(counter) //Minimum used

现在,我想添加到最大使用的服务是匹配来自示例数据的凭证代码

我试图做一些简单的事情,但我把它弄得非常复杂,他们有什么方法可以让这件事变得更简单吗?

标签: javascriptreact-native

解决方案


const arr=[
     {
        "appointmentId": "fyeBbOtHkc1VIX9nZwqw",
        "businessId": "5x7bF6YEYpffHy1JGAcblHNyHiF2",
        "serviceId": "RIgpGFxnSncs3RzSjQTs",
        "serviceType": "Learn JavaScript",
        "voucherCode": "tzDah8Yu",
      },
     {
        "appointmentId": "fyeBbOtHkc1VIX9nZwqw",
        "businessId": "5x7bF6YEYpffHy1JGAcblHNyHiF2",
        "serviceId": "RIgpGFxnSncs3RzSjQTs",
        "serviceType": "Learn JavaScript2",
        "voucherCode": "tzDah8Yu",
      },

]

const mapServiceTypes={
"Learn JavaScript":0
}
countserviceType=0

arr.map((el)=>{
  if(el["serviceType"]){
    countserviceType++
  const value=mapServiceTypes[el.serviceType]||0
  mapServiceTypes[el.serviceType]=value+1
  }
})

console.log(map)
console.log(countserviceType)

推荐阅读