2016-01-11 56 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') */