Javascript 类型编号[]不可分配给类型编号[]
我正在尝试使用Javascript 类型编号[]不可分配给类型编号[],javascript,arrays,typescript,Javascript,Arrays,Typescript,我正在尝试使用.filter和.map按键属性返回一个数字数组: public getDefaultValues(key: string): number[]{ let options = [ { key: 'cl', values: [ 5000, 10000, 15000, 30000, 50000 ]
.filter
和.map
按键属性返回一个数字数组:
public getDefaultValues(key: string): number[]{
let options = [
{
key: 'cl',
values: [
5000,
10000,
15000,
30000,
50000
]
}]
return options
.filter(function(obj) {
return obj.key == key;
})
.map(function(obj){
return obj.values;
});
}
但我得到了一个错误:
类型“number[]”不可分配给类型“number[]”。
类型“number[]”不可分配给类型“number”
如何修复此问题?过滤器将返回一个匹配数组,因此在本例中,您将获得一个包含一项的数组。然后获取该数组结果,并在其上使用map返回一个数组结果,这就是为什么要返回一个数组数组,从而导致错误 您应该使用find,也许还可以使用如下的小错误检查:
return (options
.find(function(obj) {
return obj.key == key;
}) || { values: [] }).values
下面是一个演示:
console.log([{key:5,value:[1]}]。查找(函数(obj){
返回obj.key==5;
})| |{values:[]}).values);
console.log(([{key:6,值:[1]}]).find(函数(obj){
返回obj.key==5;
})| |{values:[]}).values)代码>过滤器将返回一个匹配数组,因此在本例中,您将获得一个包含一项的数组。然后获取该数组结果,并在其上使用map返回一个数组结果,这就是为什么要返回一个数组数组,从而导致错误
您应该使用find,也许还可以使用如下的小错误检查:
return (options
.find(function(obj) {
return obj.key == key;
}) || { values: [] }).values
下面是一个演示:
console.log([{key:5,value:[1]}]。查找(函数(obj){
返回obj.key==5;
})| |{values:[]}).values);
console.log(([{key:6,值:[1]}]).find(函数(obj){
返回obj.key==5;
})| |{values:[]}).values)代码>您的返回值是一个2D数组,但您将方法的返回值声明为一个平面数字数组。正在对“outer”数组调用.filter和.map方法,选项的值为
在.filter调用之后,返回值与选项的值相同;您已经遍历了选项
,并返回了每个具有键值的对象
在.map调用之后,返回值是一个数组,其中包含该数组中每个对象上的每个values
prop的“所有”值
一个简单的return语句修复程序:
return options
.filter(function(obj) {
return obj.key == key;
})
.reduce(function(accum, obj){
return [...accum, ...obj.values || []];
}, []);
这将为您提供以下返回值:
[5000、10000、15000、30000、50000]
这是假设如果options
中有多个对象使用相同的键连接数组…您的返回值是一个2D数组,但您将方法的返回值声明为一个平面数字数组。正在对“outer”数组调用.filter和.map方法,选项的值为
在.filter调用之后,返回值与选项的值相同;您已经遍历了选项
,并返回了每个具有键值的对象
在.map调用之后,返回值是一个数组,其中包含该数组中每个对象上的每个values
prop的“所有”值
一个简单的return语句修复程序:
return options
.filter(function(obj) {
return obj.key == key;
})
.reduce(function(accum, obj){
return [...accum, ...obj.values || []];
}, []);
这将为您提供以下返回值:
[5000、10000、15000、30000、50000]
这是假设如果options
中有多个对象使用相同的键连接数组…Ummm您是否仔细阅读了错误?返回类型是数字[],在您的映射中,您可能希望返回obj.values[0]代码>?嗯,您是否仔细阅读了错误?返回类型是映射中的数字[],您可能希望返回对象值[0]代码>?非常感谢,它像一个符咒一样有效,我会在它可用时立即接受答案。非常感谢,它像一个符咒一样有效,我会在它可用时立即接受答案