2016-01-11 2 views
3

Я пересматриваю некоторые устаревшие коды. Я получаю ошибку от jshint о циклической сложности, которую я пытаюсь выяснить, как исправить предупреждение. Код находится в node.js, поэтому все, что угодно в JavaScript, очень приветствуется.Как я могу уменьшить цикломатическую сложность из этой части кода?

if (rawObj.title) { 
    formattedObj.name = rawObj.title; 
    } 
    if (rawObj.urls && rawObj.urls.web) { 
    formattedObj.url = rawObj.urls.web.project; 
    } 
    if (rawObj.photo) { 
    formattedObj.image = rawObj.photo.thumb; 
    } 
    if (rawObj.category) { 
    formattedObj.category = rawObj.category.name; 
    } 

Это действительно просто проверка того, существует ли свойство и сопоставить его с новым объектом.

+0

'Я получаю сообщение об ошибке от jshint о цикломатической complexity' - не с этим кодом вы не –

+0

Этот кусок кода не имеет большой сложности цикломатическую - в зависимости от того, как вычисляется я ожидаю, что это значение из От 3 до максимум 5. Возможно, это часть большей части кода, или у вас действительно низкий порог для получения предупреждения. –

+0

жаль, что я пропустил часть кода. – toy

ответ

1

Вид поздней вечеринки, но вы (или другие, которые искали способы уменьшить цикломатическую сложность) могли пойти с таким подходом. Это похоже на шаблон стратегии. В зависимости от того, можете ли вы или не можете использовать ES6, определите, какой из setRawObjProp вы должны использовать.

function setFormObjName() { 
    formattedObj.name = rawObj.title; 
    console.log(arguments.callee.name,formattedObj); 
} 

function setFormObjURL() { 
    formattedObj.url = rawObj.urls.web.project; 
    console.log(arguments.callee.name,formattedObj); 
} 

function setFormObjImage() { 
    formattedObj.image = rawObj.photo.thumb; 
    console.log(arguments.callee.name,formattedObj); 
} 

function setFormObjCat() { 
    formattedObj.category = rawObj.category.name; 
    console.log(arguments.callee.name,formattedObj); 
} 

function setRawObjProp(obj) { 
    var objectMap = new Map(); 

    objectMap 
    .set('string1', setFormObjName) 
    .set('string2', setFormObjURL) 
    .set('string3', setFormObjImage) 
    .set('string4', setFormObjCat); 

    if (objectMap.has(obj)) { 
    return objectMap.get(obj)(); 
    } 
    else { 
    console.log('error', obj); 
    } 
} 

/* 
function setRawObjProp2(obj) { 
    var objectMap = { 
     'string1': setFormObjName, 
     'string2': setFormObjURL, 
     'string3': setFormObjImage, 
     'string4': setFormObjCat, 
    }; 

    if (objectMap.hasOwnProperty(obj)) { 
    return objectMap.get(obj)(); 
    } 
    else { 
    console.log('error', obj); 
    } 
} 
*/ 

var rawObj = { 
    title: 'string1', 
    urls: { 
    app: { 
     project: 'some thing' 
    }, 
    web: { 
     project: 'string2' 
    } 
    }, 
    photo: { 
    large: 'large', 
    thumb: 'string3' 
    }, 
    category: { 
    name: 'string4', 
    type: 'some type', 
    id: 12345 
    } 
}, 

formattedObj = { 
    title: '', 
    urls: { 
    web: { 
     project: '' 
    } 
    }, 
    photo: { 
    thumb: '' 
    }, 
    category: { 
    name: '' 
    } 
}; 

setRawObjProp('string1'); 
/* setRawObjProp2('string1') */ 
Смежные вопросы