gpt4 book ai didi

typescript - 有没有一种更简洁的方法可以对嵌套数组中的所有元素调用类型转换函数?

转载 作者:搜寻专家 更新时间:2023-10-30 21:50:28 25 4
gpt4 key购买 nike

想象一些函数,convertType,它只接受一个数字并将其转换为一个人选择的字符串表示形式,如下所示:

convertType(someNum : number) : string {
return "Number is: " + someNum;
}

然后让有一些数组:

myNestedArrayNum = new Array<Array<Array<number>>>();

迭代此嵌套数组并利用此转换函数转换 myNestedArrayNum 的最快方法是什么?到Array<Array<Array<string>>>

目前我正在做这样的事情:

convertNestedArray(numArray : Array<Array<Array<number>>>) : Array<Array<Array<string>>> {

let strArray = new Array<Array<Array<string>>>();

for (let i = 0; i < numArray.length; i++) {

let temp1 = new Array<Array<string>>();

for (let j = 0; j < numArray[i].length; j++) {

let temp2 = new Array<string>();

for (let k = 0; k < numArray[i][j].length; k++) {

temp2.push(convertType(numArray[i][j][k]);
}
temp1.push(temp2);
}
strArray.push(temp1);
}
return strArray;
}

但是,必须有一种更简洁的方式来做到这一点,对吗?我们可以假设我们知道嵌套数组的深度。

谢谢!

最佳答案

我想你想要这样的东西:

// as many overloads as you need
function convertNestedArray<T, U>(f: (t: T) => U, v: Array<Array<Array<T>>>): Array<Array<Array<U>>>;
function convertNestedArray<T, U>(f: (t: T) => U, v: Array<Array<T>>): Array<Array<U>>;
function convertNestedArray<T, U>(f: (t: T) => U, v: Array<T>): Array<U>;
function convertNestedArray<T, U>(f: (t: T) => U, v: T): U;
function convertNestedArray<T, U>(f: (t: T) => U, v: T | Array<T>): U | Array<U> {
if (Array.isArray(v)) return v.map(e => convertNestedArray(f, e));
return f(v);
}

function convertType(someNum: number): string {
return "Number is: " + someNum;
}

const s: string[][][] = convertNestedArray(convertType, [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]);

console.log(s);

这是使用数组map函数和递归转换。您需要根据需要多次重载该函数,以处理您拥有的数组深度。 (我认为目前无法在 TypeScript 中针对任意深度完成此操作。)

希望对您有所帮助。祝你好运!

关于typescript - 有没有一种更简洁的方法可以对嵌套数组中的所有元素调用类型转换函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45492798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com