【问题标题】:Turning for Loop into forEach. Passing any array of numbers as argument将 for 循环变成 forEach。将任何数字数组作为参数传递
【发布时间】:2021-07-04 12:58:27
【问题描述】:

我正在开发一个函数,该函数返回数字数组中的最小值(或最大值)值。 看起来下面这个 forLoop 可以正常工作:

const myNumbersAr = [-1300, 120, 12, -2000, -58]
const mySecondAr = [-100, 200, -300, 400, 500]

var findMinNumber = function (oneArray) {
    var minNumber = oneArray[0]
    for (i = 0; i < oneArray.length; i++) {       
        if (oneArray[i] < minNumber) {
        minNumber = oneArray[i]     
        } 
    } 
    console.log(minNumber)
}

findMinNumber(myNumbersAr) // returns -2000
findMinNumber(mySecondAr) // returns -300

但由于我在练习,我想把它变成一个forEach。但我不明白。这是我尝试的:

var findMinNumber = function (someArray) {
    var minNumber = someArray[0];
    someArray.forEach(function (someArray) {
        
        if (someArray[i] < minNumber) {
            
            minNumber = someArray[i]
        
        }
        
    })
   console.log(minNumber)
}

findMinNumber(myNumbersAr) // returns always myNumbersAr[0] position.

我知道传递参数两次 (someArray) ,听起来不对,所以我想我应该以不同的方式订购它?

【问题讨论】:

  • 您需要function (element),然后只需要element 而不是someArray[i]。但我可以问为什么forEach 而不是for offor (let element of someArrary) 的好处是 return 仍然可以满足您的期望,您仍然可以使用 breakcontinue
  • examples of and documentation forforEach。注意传递给回调的参数是什么。
  • @CherryDT 除此以外没有什么特别的原因,这是我迄今为止所学到的。我将一步一步地尝试练习我学到的每一个新元素。我只是在关注一个小程序,而且很胖,它只向我们展示了 forloops / while 和 forEach 作为迭代数组的一种方式。我想再往前走一点,当我对这些有了更多的了解时,我会转向 ´´´for of ´´´
  • @T.J.Crowder 我会的,谢谢!虽然我仍然缺乏很多知识来理解文档的某些部分。

标签: javascript arrays foreach


【解决方案1】:

改成:

var findMinNumber = function (someArray) {
var minNumber = someArray[0];
someArray.forEach(function (someItem) {
    if (someItem < minNumber) {
        minNumber = someItem
    }
})
return minNumber;
}
const myNumbersAr = [-100, 200, -300, 400, 500]
console.log(findMinNumber(myNumbersAr));

【讨论】:

  • 非常感谢!我想我明白为什么了,但无论如何,我可以问一下为什么如果我指向someItem[i] 的位置之一,我只会得到存储在var minNumber 中的位置?我认为由于它遍历数组,[i]可能会改变,就像它对 forLoop 所做的那样
  • 在这种情况下,someItem = -100 在第一次迭代中,200 在第二次迭代中,等等。someItem[i](假设 i 是一个像 0 或 1 这样的整数)是未定义的,因为您将 someItem 视为一个数组,但事实并非如此。
  • 同样在您之前的循环中,您在此处定义ifor (i = 0;。在您的第二个循环中,i 未定义。
猜你喜欢
  • 1970-01-01
  • 2016-12-31
  • 2021-01-11
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
相关资源
最近更新 更多