2015-12-03 4 views
0

Я создаю простой инструмент ETL, используя Node.js. Итак, я получаю один объект json и манипулирую с другим объектом. Однако, после того, как проходит через Lint, я получаюКак уменьшить эту сложность Cyclomatic в этом JavaScript-коде?

18: 1 предупреждение Функция «Формат» имеет сложность 5 сложности

Это пример кода. Хотелось бы, чтобы я использовал магию JavaScript.

if (rawObj.attr1 && rawObj.attr2) { 
    formattedObj.attr2 = rawObj.attr1; 
    } 
    if (rawObj.attr3) { 
    formattedObj.otherAttr = rawObj.attr3; 
    } 
    if (rawObj.attr4) { 
    formattedObj.otherAttr4 = rawObj.attr4; 
    } 
    formattedObj.rank = index + 1; 

    if (rawObj.attr5) { 
    formattedObj.otherAttr5 = rawObj.attr5; 
    } 

в основном, это просто проверка, если свойство undefined или нет. Затем устанавливает свойство.

+1

Выслать копию? Использовать библиотеку преобразования общего назначения? –

+1

Не знаете, как измеряется ваша сложность, но вы можете встроить свои операторы if с помощью тройного оператора, чтобы всегда выполнялось назначение переменной: 'formattedObj.attr2 = rawObj.attr1 && rawObj.attr2? rawObj.attr1: undefined; '. Существуют и другие способы уменьшить вашу сложность, но общее решение несколько ограничит вас. –

+1

Будет что-то вроде этой работы: http://stackoverflow.com/questions/2802055/what-does-the-construct-x-x-y-mean –

ответ

2

Вы повторяетесь. Вместо этого используйте петлю:

var props = [ 
    {from: "attr3", to:"otherAttr"}, 
    {from: "attr4", to:"otherAttr4"}, 
    {from: "attr5", to:"otherAttr5"} 
]; 
if (rawObj.attr2) 
    props.push({from: "attr1", to:"attr2"}); 

props.forEach(function(p) { 
    if (rawObj[p.from]) 
     formattedObj[p.to] = rawObj[p.from]; 
}); 
formattedObj.rank = index + 1; 
+0

Действительно ли это уменьшает сложность? Для статического анализа, возможно, но я не думаю, что это действительно работает .... если я не полностью понимаю определение. –

+0

@ jedd.ahyoung Как вы думаете, а это не работает? – Bergi

 Смежные вопросы

  • Нет связанных вопросов^_^