Объявите массив с пользовательским диапазоном данных в angular - PullRequest
1 голос
/ 10 февраля 2020

Мне нужно объявить массив с настраиваемым диапазоном данных в angular проекте. Диапазон данных описывается комбинацией буквы префикса A или F с диапазоном номеров: A001 - A069, F070 - F660, кроме «GND» - уровень земли и UNL - не ограничен в качестве первого / последнего значения. Таким образом, структура выглядела бы так:

altitudeOptions[] = [GND], [A001],.. - ..,[A069], [AF70],.. - ..,[F660], [UNL]

Я думал о delcare двух массивах, подобных этому:

AltArrayA: number[] = [...Array(69).keys()].map(x => x + 1);

.. и затем добавьте метку буквы, объедините два массива A и F а затем установите GND и UNL в качестве первого и последнего элемента.

Пожалуйста, помогите мне сделать это оптимальным образом.

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете использовать оператор spread для объединения массивов. Кроме того, можно использовать Array.from, где вы можете установить длину массива. В зависимости от длины вы можете установить нулевые знаки:

const arr_A = Array.from({length: 69}, (v, k) => `A` +  ((k <= 8 ) ? '00' : '0') + (k + 1));
const arr_F = Array.from({length: 590}, (v, k) => `F` +  ((k < 30 ) ? '0' : '') + (k + 70));
const concatenated = ['GND', ...arr_A, 'AF70', ...arr_F, 'UNL'];

Пример:

const arr_A = Array.from({length: 69}, (v, k) => `A` +  ((k <= 8 ) ? '00' : '0') + (k + 1));
const arr_F = Array.from({length: 590}, (v, k) => `F` +  ((k < 30 ) ? '0' : '') + (k + 70));
const concatenated = ['GND', ...arr_A, 'AF70', ...arr_F, 'UNL'];
console.log(concatenated)

ОБНОВЛЕНИЕ:

Это решение даст O(n * 2) сложность:

const arr_A = Array.from({length: 69}, (v, k) => ( k % 5 == 0) ? 
        (`A` +  ((k <= 8 ) ? '00' : '0') + (k)) : null)
        .filter( f => f);
console.log(arr_A)

Однако это решение даст O(n) сложность:

const createArray = ( arrLength ) => {
  let fooArray = [];
  for (let index = 0; index < arrLength; index++) {
    if (index % 5 == 0)
      fooArray.push(`${index}`);
  }
  return fooArray;
}

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