javascript - 有条件地根据可选值创建数组的简写?

标签 javascript typescript

我有一个可以选择接受数组的函数。我还有其他变量可能未定义,但如果定义了它们,我想从中创建一个数组:

function test(array?: string[]) {
    console.log(array);
}

let value: string | undefined;
value = 'abc';

const temp = value ? [value] : undefined; // Shorthand?
test(temp)

是否有一种使用字符串数组创建temp变量或传递undefined的简便方法?我尝试执行以下操作但没有实现:

// If value is 1, true, or 'some string' it will take that value not the array
const temp = value && [value];

// Passes back an empty array if value is undefined
const temp = [value].filter(Boolean),

最佳答案

正如评论中所指出的,只需为此创建一个辅助函数:

const arrOrUndef = <T,>(val: T | undefined): T[] | undefined => val !== undefined ? [val] : undefined;

然后只需使用:

let value: string | undefined = 'abc';
test(arrOrUndef(value))

TS Playground Link

另外,感谢 pilchard在注释中指出,最好使用泛型,而不仅仅是问题中的 string 类型或 any 类型。另外,JDB请注意,您必须使用 !== undefined,而不是简单地检查虚假值(如原始问题那样)。

关于javascript - 有条件地根据可选值创建数组的简写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75667797/

相关文章:

javascript - 让 Google 热图数据点变暗

javascript - 悬停时更改背景颜色和图像

javascript - Angular 2 根据条件更改类

javascript - 如何在 Angular 中使用 IndexedDB?

angular - 错误: Cannot find a differ supporting object '[object Object]' of type 'John' . NgFor只支持绑定(bind)到Iterables比如Arrays

javascript - 为什么这个函数组件在 setState 之后没有重新渲染?

javascript - 图片库/缩放幻灯片

java - 从 Java 访问 Javascript

javascript - 使用注入(inject)的 JavaScript 从网页复制文本

angularjs - disabled=false 在 typescript 2.1 中不起作用