在 angular 中声明一个具有自定义数据范围的数组

Declare an array with custom data range in angular

我需要在 angular 项目中声明一个具有自定义数据范围的数组。 数据范围由前缀字母 A 或 F 与数字范围的组合描述:A001 - A069,F070 - F660,除了 "GND" - ground lvl 和 UNL - unlimited as first/last 值。所以结构看起来像这样:

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

我在考虑像这样删除两个数组:

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

..然后添加前缀字母,连接两个数组 A 和 F,然后将 GND 和 UNL 设置为第一个和最后一个元素。

请帮助我以最佳方式做到这一点。

您可以使用 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));