【问题标题】:Declare an array with custom data range in angular以角度声明具有自定义数据范围的数组
【发布时间】:2020-02-10 11:17:52
【问题描述】:

我需要在 Angular 项目中声明一个具有自定义数据范围的数组。 数据范围由前缀字母 A 或 F 与数字范围的组合描述:A001 - A069、F070 - F660,“GND”除外 - 接地 lvl 和 UNL - 无限制作为第一个/最后一个值。所以结构看起来像这样:

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

我在考虑这样的 delcare 两个数组:

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

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

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

【问题讨论】:

    标签: javascript arrays angular typescript declare


    【解决方案1】:

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

    【讨论】:

    • @Chrobry 很高兴它对你有所帮助:)
    • 一件更简单的事情 :) 如果我只想显示 '05'、'10'、15'...等值怎么办?
    猜你喜欢
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多