2017-03-27 30 views
1

는 내가 아래와 같이 객체에 존재하는 모든 부동산/하위 속성에서 실행할 필요가 sanitizeStr() 기능이 있습니다복잡한 개체의 모든 문자열 값을 살균 하시겠습니까?

const data = { 
    info: 'schools', 
    schools: [ 
    { name: 'Johnson Elementary', type: 'elementary' }, 
    { name: 'Iselin Middle School', type: 'middle' } 
    ], 
    bestStudent: { 
    name: 'John', 
    grade: 'sixth' 
    } 
}; 

문제는이다 그것을 위해 이러한 속성의 모든 하나 하나, 그들은 수도 있고 수도 존재하지 않는다. 지금, 나는 각 속성에 대해 여러 if 검사를 수행하는 데 수동 기능을 실행 :

// Is there a better way to do this rather than what I have here: 

if (data.info) { 
    data.info = sanitizeStr(data.info); 
} 

if (data.bestStudent) { 
    if (data.bestStudent.name) { 
    data.bestStudent.name = sanitizeStr(data.bestStudent.name); 
    } 

    if (data.bestStudent.grade) { 
    data.bestStudent.grade = sanitizeStr(data.bestStudent.grade); 
    } 
} 

if (data.schools) { 
    data.schools.forEach((school, i) => { 
    if (school.name) { 
     data.schools[i].name = sanitizeStr(school.name); 
    } 

    if (school.grade) { 
     data.schools[i].grade = sanitizeStr(school.grade); 
    } 
    }); 
} 

사람이 일을하는 청소기/덜 수동 방법을 알고있는 경우

, 그것은 감사하겠습니다.

+0

'sanitizeStr'는 무엇을하고 있는가? 기능을 추가하십시오. –

+0

꽤 관련성이 있다고 생각하지 않기 때문에 포함하지 않았습니다. 그냥 문자열을 대체합니다. 나는 기본적으로 수동으로 하나씩 수행하지 않고 모든 속성에서 해당 함수를 실행하는 더 좋은 방법을 찾아 내려고 노력하고 있습니다. – saadq

+0

가능한 중복 개체 속성을 통해 (http://stackoverflow.com/questions/8312459/iterate-through-object-properties) –

답변

3

개체에 대해 반복적 인 재귀 적 접근을 사용하고 비 개체에 대해서만 함수를 호출 할 수 있습니다.

function sanitizeStr(s) { 
 
    return '#' + s; 
 
} 
 

 
function iterAll(object) { 
 
    Object.keys(object).forEach(function (k) { 
 
     if (object[k] && typeof object[k] === 'object') { 
 
      iterAll(object[k]); 
 
      return; 
 
     } 
 
     object[k] = sanitizeStr(object[k]); 
 
    }) 
 
} 
 

 
var data = { info: 'schools', schools: [{ name: 'Johnson Elementary', type: 'elementary' }, { name: 'Iselin Middle School', type: 'middle' }], bestStudent: { name: 'John', grade: 'sixth' } }; 
 

 
iterAll(data); 
 

 
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

숫자를 살균하는 것을 피하기 위해 문자열을 명시 적으로 검사하여 문자열로 변환하는 것이 좋습니다. 어떤 경우에도 +1. –

+0

내 코드의이 시점에서 속성이 존재하는 경우 문자열이 될 것이 확실하지만 다른 사람이이 줄을 볼 경우 유용한 주석입니다. 그리고 고마워, 나는 이런 식으로 접근 할 수 있다고 생각한다. – saadq