【问题标题】:How to store values inside a Map and iterate through the Map in javascript如何在 Map 中存储值并在 javascript 中遍历 Map
【发布时间】:2020-07-06 08:54:07
【问题描述】:

我正在尝试存储电话号码及其签到时间,当我根据 5 天的数据进行操作时。我无法执行所需的输出,我也尝试了其他方法。任何人都可以提出任何解决方案来解决这个问题.

  const start = momentTz()
    .tz("Asia/Kolkata")
    .subtract(5, "days")
    .startOf("day")
    .format();

  const end = momentTz()
    .tz("Asia/Kolkata")
    .subtract(1, "days")
    .endOf("day")
    .format();
  // o8iqzZl9NxQBcoOulFfH

  const addend = await db
    .collection(`data`)
    .where("timestamp", ">=", momentTz(start).valueOf())
    .where("timestamp", "<=", momentTz(end).valueOf())
    .get();

  const checkin = new Map();
  const timeArray = [];
  addend.forEach((doc) => {
    const time = momentTz(doc.get("timestamp")).tz("Asia/Kolkata").format("LT");

    timeArray.push(time);
    // console.log(timeArray);
    checkin.set(doc.get("ms_user.ms_phoneNumber"), timeArray);//this also gives a single value inside the array 
    checkin.set(doc.get("ms_user.ms_phoneNumber"), time);
  });
console.log(checkin)

它显示这样的输出

 Map {
    '+9112345' => '10:20 AM',
    '+9112345' => '11:19 AM',
    '+91123456' => '3:23 PM', }

但我想要这种格式的结果

 Map {
    '+9112345' => ['10:20 AM','10:45 AM'],
    '+9112345' => ['11:19 AM', '12:25 AM'],
    '+91123456' => ['3:23 PM'], }

【问题讨论】:

  • 在开始循环之前 addend 的值是多少?
  • @HarmandeepSinghKalsi 这是我在查询后得到的响应快照

标签: javascript node.js google-cloud-firestore


【解决方案1】:

我们需要检查地图是否已经有给定键的值,如果是,那么我们需要获取该值并附加新的时间来添加,然后在地图中再次设置它。如果 key 不存在,我们可以简单地将其设置在 map 中,并将 value 设置为包含时间的数组。

...
const key = doc.get("ms_user.ms_phoneNumber");
if (checkin.has(key)) {
   checkin.set(key, [...checkin.get(key), time]);
} else {
   checkin.set(key, [time]);
}

【讨论】:

  • 你能再帮我一个忙吗? AM']} 因为我不知道 phoneNumbers 的确切数量
  • 您可以使用forEach 迭代签入映射。试试checkin.forEach((key, value) =&gt; console.log(key, value));
猜你喜欢
  • 1970-01-01
  • 2017-08-18
  • 2014-06-02
  • 1970-01-01
  • 2015-05-23
  • 2015-10-03
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多