[英]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.