2016-11-01 4 views
3

이 아래 코드는 잘 작동하지만 ESLint 플러그인은 경고 보여다른 방법으로 JavaScript 객체를 반복 할 수 있습니까?

let count = 0; 
    for (const key in groups) { 
     if (Object.prototype.toString.call(groups[key]) === '[object Object]') { 
     if ({}.hasOwnProperty.call(groups[key], 'users')) { 
      count += groups[key].users.length; 
     } 
     } 
    } 
+1

왜'const를 key'? 왜 'let'또는 'var'하지 않을까요? 또한 '{}} .hasOwnProperty.call (groups [key],'users ')'는 groups [key] 일 수 있습니다 .hasOwnProperty ('users ')' – Rajesh

+2

@Rajesh'key '는 몸 안에서 바뀌지 않으므로 루프의 그것이 권장되는 방법입니다. –

+0

@MadaraUchiha 나는 이것을 몰랐다. 하지만 'const key'가 올라갈 때 두 번째 반복은 무시하려고하지 않을 것인가? – Rajesh

답변

11

당신의 목표가 ESLint의 오류를 피하는 것이라면 Object.keys(obj).forEach()을 사용하여 제안 할 것입니다. 저는 보통이 방법을 저의 프로젝트에 사용합니다.

의사 예 :

Object.keys(groups).forEach(key => { 
    if (Object.prototype.toString.call(groups[key]) === '[object Object]') { 
     if ({}.hasOwnProperty.call(groups[key], 'users')) { 
      count += groups[key].users.length; 
     } 
    } 
}); 
+2

감사합니다. 완벽하게 작동합니다. 그러나 ESLint를 방지하려면 "Object.keys (groups) .forEach (key => {"를 "Object.keys (groups) .forEach ((key) => {"로 변경해야합니다. – methis

+0

화살표 범위의 매개 변수는 싱글 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions 당신의 방식대로하는 것이 깔끔합니다, ++! – Roberrrt

0

당신은 하나를 사용 : "허용되지 않는 'ForinStatement를'사용"그래서 내가 경고 메시지를 방지하기 위해 다른 방법으로 변경하려면 점검 및 계산을위한 라인. 그런 다음과 같이 반복 할 수

function* it(obj) { 
    for (const key in obj) { 
    if (obj.hasOwnProperty(key)) { 
     yield [key, obj[key]]; 
    } 
    } 
} 

:

let count = Object.keys(groups).reduce((r, key) => 
    r + (('users' in groups[key]) && groups[key].users.length || 0), 0); 
+0

해결책이 잘못되었습니다. – methis

+0

테스트에서 무엇이 잘못 되었습니까? –

+0

Btw를 사용하면 코드의 다른 의미가 다르므로 그룹 ([keys] .hasOwnProperty ('users')'대신) [사용자] 그룹에서 [사용자]를 사용하는 것이 더 좋습니다. – zerkms

0

내가 객체를 반복하는 it 도우미 함수를 구현하고자

for (const [key, value] of it(obj)) { 
    if ({}.toString.call(value) === '[object Object]' && 
     value.hasOwnProperty('users')) { 
     count += connections[key].users.length; 
    } 
} 

이 방법은 여전히 ​​for..in를 사용하지만, 이제 포함 된 것 한 기능에서 ESLint 파일에서 단일 예외를 만들 수 있습니다. 그렇다면 다시 사용할 필요가 없습니다.

관련 문제