Массив, используемый в начальных значениях, работает только тогда, когда полностью определен - PullRequest
1 голос
/ 30 марта 2020

Я в основном хочу сделать следующее:

const intialDefaultValues = {
  weekdays: {
    monday: [
      { startTime: "", endTime: "" },
      { startTime: "", endTime: "" },
      { startTime: "", endTime: "" }
    ],
    tuesday: [
      { startTime: "", endTime: "" },
      { startTime: "", endTime: "" },
      { startTime: "", endTime: "" }
    ],
    wednesday: [
      { startTime: "", endTime: "" },
      { startTime: "", endTime: "" },
      { startTime: "", endTime: "" }
    ],
// ...

Как вы можете видеть, это становится довольно повторяющимся, и я хотел бы повторно использовать часть кода:

const daySchema = [
  { startTime: "", endTime: "" },
  { startTime: "", endTime: "" },
  { startTime: "", endTime: "" }
];

const intialDefaultValues = {
  weekdays: {
    monday: daySchema,
    tuesday: daySchema,
    wednesday: daySchema,
// etc.  

Но это не работает ...

Попытки

Один источник Я нашел упомянутое прохождение по ссылке для объектов и массивов в Javascript. Так что это заставило меня попробовать несколько способов клонировать его. Все еще не повезло.

Я попробовал хороший старый метод myArray.slice(), как в ES6: [...myArray]:

const intialDefaultValues = {
  weekdays: {
    monday: [...daySchema],
    tuesday: [...daySchema],
    wednesday: [...daySchema], 
  // etc.

Воспроизводимый пример

I Я создал CodeSandbox для отображения проблемы, с которой я столкнулся: https://codesandbox.io/s/interesting-wave-e7gty

Подробная версия

Чтобы увидеть эту ошибку, сделайте следующее:

  1. В первой форме нажмите на слово среда. Он должен открыться.
  2. Затем нажмите «Отправить»

Результат: Имя и первые поля «От» и «Кому» должны быть красного цвета. Это работает!

Компактная версия

Теперь для компактного примера:

  1. Во второй форме нажмите на слово среда. Он должен открыться.
  2. Затем нажмите «отправить»

Ожидаемый результат: имя и первые поля «От» и «Кому» должны быть красного цвета.

Фактический результат: проверяется только имя

1 Ответ

0 голосов
/ 30 марта 2020

Вы можете взять функцию для получения объекта с пустым значением и другую для получения дня.

const
    getRange = (startTime = "", endTime = "") => ({ startTime, endTime }),
    getDay = (length, fn, ...params) => Array.from({ length }, _ => fn(...params));

console.log(getDay(3, getRange));
...