首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型number[][]不能分配给number[]类型

类型number[][]不能分配给number[]类型
EN

Stack Overflow用户
提问于 2018-04-02 20:17:21
回答 2查看 2.1K关注 0票数 0

我试图使用.filter.map通过一个键属性返回一个数字数组。

代码语言:javascript
复制
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’。

我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-02 20:24:00

Filter将返回一个匹配数组,因此在本例中,您将得到一个数组,其中包含一个项。然后,您将获取该数组结果,并使用它上的映射来返回数组结果,这就是为什么要返回数组数组的原因,因此出现了错误。

您应该使用find,也许还应该使用下面这样的小错误检查:

代码语言:javascript
复制
return (options
    .find(function(obj) {
      return obj.key == key;
    }) || { values: [] }).values

下面是一个演示:

代码语言:javascript
复制
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);

票数 4
EN

Stack Overflow用户

发布于 2018-04-02 20:28:40

您的返回值是一个2D数组,但是您正在声明您的方法的返回值是一个平面数字数组。您的.filter和.map方法是在“外部”数组( options的值)上调用的。

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

在您的.map调用之后,返回值是一个数组,它包含该数组中每个对象上每个values支柱的“所有”值。

返回语句的简单修复:

代码语言:javascript
复制
return options
.filter(function(obj) {
  return obj.key == key;
})
.reduce(function(accum, obj){
  return [...accum, ...obj.values || []];
}, []);

它应该给出以下返回值:

[5000, 10000, 15000, 30000, 50000]

这是假设如果options中有多个具有相同键的对象,则需要连接数组.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49618202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档