jshint - 不要使用Array.find在循环中创建函数

时间:2017-05-03 17:56:47

标签: javascript jshint

我知道这个问题已经存在了一段时间,但我找不到可以解决我的问题的答案(对不起,如果我错过了)。

无论如何,我有以下代码:

for(let i=0; i<array.length; i++) {
    let value = array[i];
    let anotherValue = anotherArray.find(val => val.key === value.key);
}

该代码使jshint抛出警告:不要在循环中创建函数。 (W083)

我需要访问“for”范围内的变量这一事实让我需要在其中声明一个函数。

我尝试了以下方法:

let myFunc = (val) => {
    //no value here to compare
}
for(let i=0; i<array.length; i++) {
    let value = array[i];
    let anotherValue = anotherArray.find(myFunc);
}

如果我在之外将其声明为,则无法访问变量。

1 个答案:

答案 0 :(得分:1)

尝试使用Array.forEach代替for - 循环:

array.forEach((value) => {
  let anotherValue = anotherArray.find(val => val.key === value.key);
  /* do anything with anotherValue */
}

或者,你可以curry your function来获取value并且仍有功能:

let myFunc = candidate => target => candidate.key === target.key;
for (let i = 0; i < array.length; i++) {
    let anotherValue = anotherArray.find(myFunc(array[i]));
}

另外,您可以通过在文件顶部添加指令来告诉JSHint忽略此规则中的此规则:

/* jshint loopfunc: true */