繁体   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