繁体   English   中英

带有nested.forEach() 的while 循环会产生no-loop-func es-lint 警告

[英]While loop with nested .forEach() produces no-loop-func es-lint warning

这是一个 javascript 问题。 不久前,我在 Ruby 教程中学习了一种排序模式,现在我尝试在 javascript 中重用相同的模式:

const sortMyArray = (someArr) => {

let arrToSort = [...someArr];

let sorted = false;

  while(!sorted) {
   sorted = true;

    array1.forEach((foo) => {

      array2.forEach((bar, i) => {

        if (foo.attr !== bar.attr) {

          let plucked = arrayToSort.splice(i, 1)
          arrayToSort.push(plucked[0])
          sorted = false
        }
      })
    })
  }

}

我对这种模式感到满意,并希望保留它。 我不得不将 es-lint 配置为忽略文件顶部的no-loop-func (有问题的变量是从内部循环外部传递的sorted变量),但我想避免这样做javascript 作为警告很有用,我只是认为它对这个例子没有帮助。

有没有其他方法可以在 javascript 中很好地实现这种相同的效果?

https://eslint.org/docs/rules/no-loop-func

警告应该更具体地说明它与sorted变量有关:

在循环中声明的 Function 包含对“已排序”变量的不安全引用。 (无循环功能)

这里不喜欢的是,在修改sorted的循环内有一个 function ,这是在外面 - 它不知道这个 function 保证只在您的 while 循环内运行一次。

无论如何,您可以通过以下方式解决此问题:

for (const foo of array1) {

或者如果您需要索引(例如第二个循环):

for (let i = 0; i < array2.length; i++) {
    const bar = array2[i];

现在,您不再在使用外部变量的循环内创建 function。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM