【发布时间】:2017-08-20 18:21:48
【问题描述】:
我有一个 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);
}
});
}
如果有人知道这样做的更清洁/更少手动的方式,将不胜感激。
【问题讨论】:
-
sanitizeStr在做什么?请同时添加该功能。 -
我没有包含它,因为我认为它不太相关——它只是做了一些字符串替换。我基本上只是想找出一种更好的方法来在每个属性上运行该函数,而不必手动一个一个地执行。
-
@MikeMcCaughan 我知道如何遍历对象的属性。但是,我不能只循环并在循环中的每个道具上运行
sanitizeStr,因为该属性可能是字符串、对象或对象数组。 -
在属性上运行
sanitizeStr之前不能检查类型?typeof stringVar === 'string'...
标签: javascript string sanitization