Как заполнить массив объектом, содержащим восходящие строковые числа? - PullRequest
0 голосов
/ 23 июня 2018

Мне нужно сгенерировать массив объектов, который имеет три ключа со строковыми значениями от 1 до 31. Строки должны иметь два символа, что означает, что 1-9 должны получить 0 впереди.

const days = [
  { key: '01', value: '01', text: '01' },
  { key: '02', value: '02', text: '02' },
  { key: '03', value: '03', text: '03' },
  ...
  { key: '30', value: '30', text: '30' },
  { key: '31', value: '31', text: '31' }
]

Я думаю, что это должно быть сделано немного короче и умнее, чем решение, которое я придумала:

const days = Array.from({ length: 31 }, (v, k) => {
  return { 
    key: k > 10 ? (k + 1).toString() : '0' + (k + 1),
    value: k > 10 ? (k + 1).toString() : '0' + (k + 1),
    text: k > 10 ? (k + 1).toString() : '0' + (k + 1)
  }
})

А что делать, если я не начинаю со значения 1? Например, тот же массив за годы с 1950 г. по настоящее время (в обратном порядке):

const years = [
  { key: '2018', value: '2018', text: '2018' },
  ...
  { key: '1950', value: '1950', text: '1950' }
]

Ответы [ 3 ]

0 голосов
/ 23 июня 2018

Вы делаете это просто, вы можете использовать padStart()

const days = Array.from({length: 31}, (v, k) => {
  let o = (k + 1).toString().padStart(2, '0');
  return {key: o,value: o,text: o}
});

console.log(days);

Относительно года, та же структура, но вместо добавления 1 добавьте начальный год.

const years = Array.from({length: 20}, (v, k) => {
  let o = (k + 2000);
  return {key: o,value: o,text: o}
});

console.log(years);

Документ: padStart ()

0 голосов
/ 23 июня 2018

const days = Array.from({ length: 31 }, (v, i) => 
  ({ key: v = (++i > 9 ? '' : '0') + i, value: v, text: v }) );

const years = Array.from({ length: 2018 - 1950 + 1 }, (v, i) => 
  ({ key: v = 2018 - i + '', value: v, text: v }) );

console.log( JSON.stringify( days  ).replace(/},/g, '},\n ') );
console.log( JSON.stringify( years ).replace(/},/g, '},\n ') );
0 голосов
/ 23 июня 2018

Я думаю, что это должно быть сделано немного короче и умнее ...

Ну, вы, конечно, можете повторяться намного меньше:

const days = Array.from({ length: 31 }, (v, k) => {
  const value = k > 10 ? (k + 1).toString() : '0' + (k + 1);
  return { 
    key: value,
    value,
    text: value
  };
});

Live Пример:

const days = Array.from({ length: 31 }, (v, k) => {
  const value = k > 10 ? (k + 1).toString() : '0' + (k + 1);
  return { 
    key: value,
    value,
    text: value
  };
});
console.log(days);
.as-console-wrapper {
  max-height: 100% !important;
}

А что делать, если я не начинаю со значения 1?

Просто добавьте желаемое значение:

const startYear = 2018;
const years = Array.from({ length: 5 }, (v, k) => {
  const value = String(k + startYear);
  return { 
    key: value,
    value,
    text: value
  };
});

Live Пример:

const startYear = 2018;
const years = Array.from({ length: 5 }, (v, k) => {
  const value = String(k + startYear);
  return { 
    key: value,
    value,
    text: value
  };
});
console.log(years);
.as-console-wrapper {
  max-height: 100% !important;
}

Естественно, оберните это в функцию, если вам нужно что-то многоразовое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...