过滤器不会过滤未定义的
filter wont filter undefined
盯着这段代码看了一段时间..
需要一些帮助
我有这个过滤器,我正在尝试从数组中删除未定义的对象:
.then((items) => {
const filtered = items.map( i => {
if (i !== undefined) {
return i
}
})
updateState(filtered, query)
});
后面是过滤后的给错:
Argument of type '({ service: Service; results: Card[]; } | undefined)[]' is not assignable to parameter of type 'SearchResult[]'.
Type '{ service: Service; results: Card[]; } | undefined' is not assignable to type 'SearchResult'.
Type 'undefined' is not assignable to type 'SearchResult'.
当我尝试将它传递给 updateState() 函数时。
过滤器不应该这样做吗?从数组中删除未定义的项目..
这是怎么回事?
编辑:即使使用类型断言进行过滤也会产生相同的错误..
const filtered: SearchResult[] = results.filter( i => i as SearchResult)
同样的结果..
谢谢
如果您没有 return 来自 map
函数的值,它 returns undefined
,因此您当前代码中的 return undefined
值仍然是 undefined
.
您可以通过使用 filter 而不是地图来获得您想要的结果,或者当您的地图遇到 undefined
时 return 使用 undefined
以外的默认值。
所以,事实证明 Typescript 无法在此处确定 return 的类型..
在长期滥用 google 使用不同关键字进行搜索后,我想到了这一行
const filtered: SearchResult[] = results.filter( (i): i is SearchResult => !!i)
我从这个博客中得到它 post:
https://www.benmvp.com/blog/filtering-undefined-elements-from-array-typescript/
祝大家有个愉快的一天!
当使用map
过滤掉undefined
(或其他类型)值时,您实际上可以使用flatMap
代替(如果您不想使用filter
).
方法如下:
const filtered = items.flatMap((item) => (item ? [item] : []));
请注意,通过这种方式,Typescript 将为您的数组推断出正确的类型
或者,使用完整语法:
const filtered = items.flatMap((item) => {
if (item !== undefined) return [item];
else return [];
});
您甚至可以删除不需要的方括号:
const filtered = items.flatMap((item) => {
if (item !== undefined) return item;
else return [];
});
const filtered = items.flatMap((item) => (item ? item : []));
盯着这段代码看了一段时间..
需要一些帮助
我有这个过滤器,我正在尝试从数组中删除未定义的对象:
.then((items) => {
const filtered = items.map( i => {
if (i !== undefined) {
return i
}
})
updateState(filtered, query)
});
后面是过滤后的给错:
Argument of type '({ service: Service; results: Card[]; } | undefined)[]' is not assignable to parameter of type 'SearchResult[]'.
Type '{ service: Service; results: Card[]; } | undefined' is not assignable to type 'SearchResult'.
Type 'undefined' is not assignable to type 'SearchResult'.
当我尝试将它传递给 updateState() 函数时。
过滤器不应该这样做吗?从数组中删除未定义的项目.. 这是怎么回事?
编辑:即使使用类型断言进行过滤也会产生相同的错误..
const filtered: SearchResult[] = results.filter( i => i as SearchResult)
同样的结果..
谢谢
如果您没有 return 来自 map
函数的值,它 returns undefined
,因此您当前代码中的 return undefined
值仍然是 undefined
.
您可以通过使用 filter 而不是地图来获得您想要的结果,或者当您的地图遇到 undefined
时 return 使用 undefined
以外的默认值。
所以,事实证明 Typescript 无法在此处确定 return 的类型..
在长期滥用 google 使用不同关键字进行搜索后,我想到了这一行
const filtered: SearchResult[] = results.filter( (i): i is SearchResult => !!i)
我从这个博客中得到它 post: https://www.benmvp.com/blog/filtering-undefined-elements-from-array-typescript/
祝大家有个愉快的一天!
当使用map
过滤掉undefined
(或其他类型)值时,您实际上可以使用flatMap
代替(如果您不想使用filter
).
方法如下:
const filtered = items.flatMap((item) => (item ? [item] : []));
请注意,通过这种方式,Typescript 将为您的数组推断出正确的类型
或者,使用完整语法:
const filtered = items.flatMap((item) => {
if (item !== undefined) return [item];
else return [];
});
您甚至可以删除不需要的方括号:
const filtered = items.flatMap((item) => {
if (item !== undefined) return item;
else return [];
});
const filtered = items.flatMap((item) => (item ? item : []));