首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免每次使用此循环时都覆盖对象属性?

如何避免每次使用此循环时都覆盖对象属性?
EN

Stack Overflow用户
提问于 2020-06-23 06:19:42
回答 1查看 31关注 0票数 0

我有下面的代码,它解析一个Excel文件,获取用户的时间表,并将其添加到一个对象中。如果我使用一个数组,我可以使用移位的开始和结束来推送单个的date对象。但是,如果我想使用一个对象,并让日期成为该对象的个人特性,那么它在每次循环时都会被覆盖。我有办法把这事办好吗?

代码语言:javascript
复制
const ExcelJS = require("exceljs");
let date = new Date(2020, 05, 01);
var moment = require("moment");
const schedules = {
  "user1": [],
};
shifts = {
  "9-18": {
    start: moment("9:00:00", "HH:mm:ss").format("hh:mm A"),
    end: moment("18:00:00", "HH:mm:ss").format("hh:mm A"),
  },
  "12-21": {
    start: moment("12:00:00", "HH:mm:ss").format("hh:mm A"),
    end: moment("21:00:00", "HH:mm:ss").format("hh:mm A"),
  },
  "10-14": {
    start: moment("10:00:00", "HH:mm:ss").format("hh:mm A"),
    end: moment("14:00:00", "HH:mm:ss").format("hh:mm A"),
  },
  "9-16": {
    start: moment("9:00:00", "HH:mm:ss").format("hh:mm A"),
    end: moment("116:00:00", "HH:mm:ss").format("hh:mm A"),
  },
  "15-21": {
    start: moment("15:00:00", "HH:mm:ss").format("hh:mm A"),
    end: moment("21:00:00", "HH:mm:ss").format("hh:mm A"),
  },
  "21-1": {
    start: moment("21:00:00", "HH:mm:ss").format("hh:mm A"),
    end: moment("1:00:00", "HH:mm:ss").format("hh:mm A"),
  },
  "21-6": {
    start: moment("21:00:00", "HH:mm:ss").format("hh:mm A"),
    end: moment("6:00:00", "HH:mm:ss").format("hh:mm A"),
  },
  "00-9": {
    start: moment("00:00:00", "HH:mm:ss").format("hh:mm A"),
    end: moment("9:00:00", "HH:mm:ss").format("hh:mm A"),
  },
  DO: { start: null, end: null },
  CO: { start: null, end: null },
};

const readxl = async () => {
  const workbook = new ExcelJS.Workbook();
  const file = await workbook.xlsx.readFile("../../June.xlsx");
  const worksheet = file.getWorksheet("June");
  let cell = 5;
  let row = 9;
  let name = 4;

  while (true) {
    let rows = worksheet.getRow(row);
    if (row === 10) {
      break;
    } else if (row === 19) {
      row = 28;
    } else if (row === 31) {
      row = 33;
    } else if (cell === 35) {
      date.setDate(date.getDate() - 30);
      row += 1;
      console.log(row);
      cell = 5;
    }

    while (true) {
      if (cell === 35) {
        break;
      }
      //   console.log(
      //     date.toLocaleDateString(),
      //     rows.getCell(name).value,
      //     `${shifts[rows.getCell(cell).value].start} - ${
      //       shifts[rows.getCell(cell).value].end
      //     }`
      //   );
      schedules[rows.getCell(name).value].push({
        [date.toLocaleDateString()]: {
          start: shifts[rows.getCell(cell).value].start,
          end: shifts[rows.getCell(cell).value].end,
        },
      });
      cell++;
      date.setDate(date.getDate() + 1);
    }
  }
  console.log(schedules["user1"]);
};

readxl();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-23 06:31:02

只需为每个日期创建一个数组。对象不能有多个相似的键。

代码语言:javascript
复制
if(!evelina[rows.getCell(name).value]) {
    evelina[rows.getCell(name).value] = [];
}

if(!evelina[rows.getCell(name).value][date.toLocaleDateString()]) {
    evelina[rows.getCell(name).value][date.toLocaleDateString()]=[];
}

evelina[rows.getCell(name).value][date.toLocaleDateString()].push({
          start: shifts[rows.getCell(cell).value].start,
          end: shifts[rows.getCell(cell).value].end,
        });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62524394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档