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