[英]Array.reduce strange behaviour
大家好 !
我目前正在努力獲取用戶輸入並以我的方式對其進行解析。 輸入代表整數范圍或單個整數。 假設我得到以下range數組:
const ranges = [`1-6`, `8`, `12-20-18`, `22-21`, `46-42-44`];
現在我需要一個完整的整數列表,所以我寫了這個塊:
const list = ranges.reduce ((array, range) => {
console.log (array);
if (!range.incldues (`-`)) return array.push (parseInt (range)); // Single integer
const milestones = range.split (`-`).map (milestone => parseInt (milestone)),
min = Math.min (...milestones),
max = Math.max (...milestones);
for (let i = min; i <= max; i++) array.push (i);
console.log (array);
return array;
}, []);
事情是我突然得到了一個“ Uncaught TypeError:array.push不是一個函數”,console.logging我的變量顯示,在第一次reduce迭代之后,array的值是(int)7,盡管在返回之前是一個數組聲明。
有人可以指出哪里出了問題嗎? 如何預防呢? 而且,如果有人可以解釋為什么會出錯,那將是完美的。
謝謝 !
兩個問題:
.includes
(不incldues
) Array.prototype.push
返回數組的新長度 ,而不是數組本身。 首先使用push
,然后在下一行使用return array
。 修復這些問題,它可以按預期工作:
const ranges = [`1-6`, `8`, `12-20-18`, `22-21`, `46-42-44`]; const list = ranges.reduce((array, range) => { if (!range.includes(`-`)) { array.push(parseInt(range)); // Single integer return array; } const milestones = range.split(`-`).map(Number), min = Math.min(...milestones), max = Math.max(...milestones); for (let i = min; i <= max; i++) array.push(i); return array; }, []); console.log(list);
請注意,由於Number
函數將非數字轉換為數字,因此您可以簡單地將其傳遞給.map
而不是使用.map (milestone => parseInt (milestone))
(有點羅y)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.