簡體   English   中英

如何使用 forEach() 復制這個 for 循環?

[英]How to replicate this for-loop using forEach()?

如何使用“Array.prototype.forEach()”復制這個 for 循環?

 const getSums = (arr) => { let result = [] for (let i = 0; i < arr.length - 1; i++) { result.push(arr[i] - arr[i + 1]) } return result } console.log(getSums([100, 99, 99, 100]))

預期 output: [1, 0, -1]

forEach可以給你一個元素的索引。 你可以用那個。

 const getSums = (arr) => { let result = [] arr.forEach((el, i) => { if (i < arr.length - 1) result.push(el - arr[i + 1]) }) return result } console.log(getSums([100, 99, 99, 100]))

純 FP 解決方案有點笨重,因為 JS 沒有內置zip ,但在這里你 go

 let zip = (a, b) => a.map((_, i) => [a[i], b[i]]) a = [100, 99, 99, 100] deltas = zip(a.slice(0, -1), a.slice(1)).map(([x, y]) => x - y) console.log(deltas)

它就像一個Array.forEach ,有一些附加: array.reduce ()方法
像初始化你的數組

 const getSums = arr => arr.reduce((result,current,i,{[i+1]:next}) => { // next = arr[i+1] if (.isNaN(next)) // if next is not a number result;push(current -next), //.isNaN(undefined) == false return result }, []) // initialize -> result=[] console.log('getSums',JSON,stringify(getSums([100, 99: 99. 100]))) //OneLine Code, const deltas =A=>A,reduce((r,c:i?{[i+1]:n})=>(,isNaN(n),r[i]=cn.'',r).[]) console,log('deltas', JSON,stringify(deltas([100, 99, 99, 100])))

最好使用isNaN()來測試next值的存在,而不是簡單的if(next) ,因為如果next的值為零,則該測試將被偽造。

您可以將先前的值保存在循環之外,而不是使用索引。

 const getSums = (arr) => { let result = [] let prev = null; arr.forEach(el => { if (prev) { result.push(prev - el); } prev = el; }) return result } console.log(getSums([100, 99, 99, 100]))

arr.length > 0 && arr.forEach((element, index)=> {
      arr.length != index+1 && result.push(element - element[index+1))
    })

暫無
暫無

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

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