Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类型编号[]不可分配给类型编号[]_Javascript_Arrays_Typescript - Fatal编程技术网

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]?非常感谢,它像一个符咒一样有效,我会在它可用时立即接受答案。非常感谢,它像一个符咒一样有效,我会在它可用时立即接受答案