【问题标题】:Creating tuples of dynamic size in Typescript在 Typescript 中创建动态大小的元组
【发布时间】:2016-12-09 11:52:50
【问题描述】:

最近我试图为数组创建拉链。例如:当用户输入 3 个大小为 3、5、12 的数组时,元组的输出数组是最大数组的大小。并且输出包含给定索引处的元素元组,如果没有索引,则为空。

我尝试了通用方法以使其更加有用。

所以我创建了 util 静态函数:

public static zip<T>(arrays : T[][]) : () => [dynamic tuple here somehow of types T][] {

我一开始就卡住了,如何定义返回动态大小的元组数组的函数?甚至可能吗?打字稿文档缺少这样的示例,所以我想我的代码将无法工作,我必须应用一些变通方法,例如返回任何。

【问题讨论】:

  • 您能否更具体地说明您希望从函数中得到什么结果?为什么要返回一个包含最大数组元素的元组?为什么不只返回最大的数组?您想提供索引作为参数吗?还是数组中的索引?
  • 我的意思是我想将包含一些对象的数组列表转换为元组数组。所以代替输出数组索引 1,我想要值 [array1[1],...,arrayN[1]] 的元组。这就是问题所在,我不知道如何伪造返回的类型,或者是否有可能。
  • 我有一张图片,如果对你有帮助的话@hanger : link
  • 感谢您的图片,但图片看起来就像一个数组?您是否还希望该数组中的每个数组都具有某种名称,而这正是我们需要元组的地方?
  • - 数组中的那些数组实际上是元组,至少我希望它们是这样的

标签: arrays typescript dynamic initialization tuples


【解决方案1】:

我想这就是你所追求的:

class Demo {
    public static zip<T>(arrays: Array<Array<T>>): Array<[string, Array<T>]> {

        let max = Demo.getMaxArrayLength(arrays);
        let res: Array<[string, Array<T>]> = [];

        arrays.forEach(subArray => {
            for (let i = 0; i < max; i++) {
                if (!res[i])
                    res[i] = [`Array${i}`, []];

                let value = subArray.length > i ? subArray[i] : null;
                res[i][1].push(value);
            }
        }); 

        return res;
    }

    private static getMaxArrayLength(arrays: Array<Array<any>>): number {

        let lengths: Array<number> = []
        for (let i = 0; i < arrays.length; i++)
            lengths.push(arrays[i].length);

        return Math.max(...lengths);
    }
}

【讨论】:

    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多