【问题标题】:Array of counters in React NativeReact Native 中的计数器数组
【发布时间】:2020-10-12 08:32:27
【问题描述】:

我试图实现一个计数器数组,它将在每个位置保存每个元素在数组中出现的次数。

例如我有这个结果:

来自此 Firestore 查询:

 useEffect(() => {
    firebase
    .firestore()
    .collection("users")
    .doc(uid)
    .collection("confirmed-appointments").get().then((querySnapshot) => {
      let arrayofServices = [];
      querySnapshot.forEach((doc) => {
        arrayofServices.push(doc.data().serviceType)
      })
      console.log("Array of services ", arrayofServices);
      setServices(arrayofServices);
    })
    
  }, [])

我想创建一个数组,为我的数据库中的每个 serviceType 保存一个计数器。

我认为创建一个包含服务名称和计数器的对象可能更容易,但我不知道如何实现这一点

【问题讨论】:

    标签: javascript arrays react-native google-cloud-firestore


    【解决方案1】:

    const arrayofServices = ['osher', 'osher', 'yanir', 'dor', 'osher'];
    
    const servicesCounter = arrayofServices.reduce((counterObj, service) => {
      if (counterObj.hasOwnProperty(service)) {
        counterObj[service] += 1;
        return counterObj;
      }
    
      return {
        ...counterObj,
        [service]: 1
      };
    }, {});
    
    console.log(servicesCounter);

    【讨论】:

    • 令人惊叹的工作!你知道我怎样才能得到 Max、Min 和 Max - 1 的值吗?最大值为 3 最小值为 1 最大值 - 1 = 第二个最常用的服务
    • 根据你需要它的用途和你需要的格式(只是数字,服务名称加上数字,只是服务名称),你可以用不同的方式检索最大值和最小值:基本上您可以将serviceCounter 对象转换为数组(使用Object.keys()Object.values()Object.entries())并对其进行排序或将其作为Math.min()Math.max() 的参数传播。
    • 我是 javascript 的新手,随着项目的进行学习它,所以我会按照你的建议尝试实现,我只需要值,我将服务名称保存在不同的数组中
    • 是的,这是正确的方法,尤其是如果您正在尝试学习 javascript;先自己试试看,有没有卡住的欢迎询问。 ;)
    • 我使用了这个: const serviceCounterArray = Object.entries(servicesCounter);然后 const minUsed = Math.min(...serviceCounterArray);它返回一个“NaN”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多