的陣列時,假設我有一個數組,看起來像:TS2345錯誤操作對象
let arr = [{field: ["alice"]}, {field : ["bob", "charlie"]}
我希望能夠Concat的所有值,而無需編寫嵌套循環for
。 我到目前爲止已經做到了這一點:
arr.reduce((a, b) => a.field.concat(b.field))
的問題,因爲我看到這一點,該陣列的類型,可以說arr : Array<MyObject>
,改變當映射或類似的東西。
即時得到一個TS2345錯誤
...是不能分配給類型的參數...
只是爲了澄清事實,其結果應該是相同的結果如下。
let result = [];
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].field.length; j++) {
result.push(arr[i].field[j])
}
}
對不起,我不能分享我的真實代碼,但這是確切的問題。 由於某些原因,這對Chrome的開發人員工具有效,但在嘗試編譯我的代碼時無法使用。
只是爲了:
這與計算澄清,您添加的for循環已驗證可以正常工作,對吧?問題在於TS編譯reduce函數是以同樣的方式工作嗎?是的,這個循環的作用是 – Katana314
。這個問題是由於在一次concatanation之後數組[0]與其他數據類型不同而造成的,所以下一次reduce調用根本不會是類型安全的。通過使用Map之前,我們選擇每個項目是所需的類型,然後調用所有這些函數 –