簡體   English   中英

類型編號[] []無法分配給類型編號[]

[英]Type number[][] is not assignable to type number[]

我正在嘗試使用.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”。

我怎樣才能解決這個問題?

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); 

您的返回值是2D數組,但是您要聲明方法的返回值是數字的平面數組。 您的.filter和.map方法是在“外部”數組( options的值)上調用的。

調用.filter之后,返回值與options的值相同; 您遍歷了options並返回了每個具有鍵值的對象。

在.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中的多個對象具有相同的鍵,則您希望將數組連接起來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM