簡體   English   中英

Array.reduce奇怪的行為

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

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