2017-05-03 4 views
0

이 질문은 잠시 동안 있었지만 내 사례를 해결할 수있는 대답을 찾지 못했습니다 (미안하지만 놓친 경우). 루프 내에서 기능을하지 마십시오 :jshint - Array.find를 사용하여 루프 내에서 함수를 작성하지 마십시오.

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); 
} 

내가 변수에 액세스 할 수 없습니다

나는 다음과 같은 접근 방식을 시도했다. 당신은 value을 여전히 기능을 가질 수 있도록하기 위해, 또는

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

curry your function을 할 수 있습니다 :

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

그럼에도 불구하고 다른 방법을

+0

경고 메시지를 끄기 만하면됩니다. –

+0

문제는 메시지가 아닙니다. 그렇게되면 쉽게 벗어날 수 있습니다. 나는 더 나은 구현이되어야한다고 생각합니다. –

+1

귀하의 구현은 완벽합니다. –

답변

1

대신 for -loop의 Array.forEach를 사용해보십시오 , 파일 상단에 지시문을 추가하여 JSHint에이 규칙을 무시하도록 지시 할 수 있습니다.

/* jshint loopfunc: true */ 
+1

카레 접근법은 루프의 모든 반복마다 함수를 생성합니다. –

+0

"함수 발생기"가 루프 외부에 정의되어 있기 때문에 jshint가 그것에 대해 불평하지 않을 것이라고 생각합니다. 나는 이것을 테스트하지 않았다. –