类型编号[] []不能分配给类型编号[]

时间:2018-04-02 20:17:22

标签: javascript arrays typescript

我正在尝试使用.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'类型。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

Filter将返回一个匹配数组,因此在此示例中,您将获得一个包含一个项目的数组。然后你正在获取该数组结果并使用map来返回数组结果,这就是为什么你返回一个数组数组因此错误。

您应该使用find,或者像这样使用一个小错误检查:

return (options
    .find(function(obj) {
      return obj.key == key;
    }) || { values: [] }).values

这是一个演示:



console.log(([{key:5, values: [1]}].find(function(obj) {
      return obj.key == 5;
    }) || { values: [] }).values);
console.log(([{key:6, values: [1]}].find(function(obj) {
      return obj.key == 5;
    }) || { values: [] }).values);




答案 1 :(得分:0)

您的返回值是2D数组,但您要声明方法的返回值是一个平坦的数字数组。您的.filter和.map方法正在"外部"数组,options的值。

在.filter调用之后,返回值与options的值相同;您已遍历options并返回了具有键值的每个对象。

在.map调用之后,返回值是一个包含" all"的数组。该数组中每个对象的每个values道具的值。

返回声明的简单修复:

return options
.filter(function(obj) {
  return obj.key == key;
})
.reduce(function(accum, obj){
  return [...accum, ...obj.values || []];
}, []);

这应该给你返回值:

[5000, 10000, 15000, 30000, 50000]

假设如果options中有多个具有相同键的对象,您可能希望连接数组...