2016-04-12 5 views
3

Im используя следующий код, который работает, но после прочтения о JS (im довольно новый) Я заметил 3 вещи.удалить избыточный код способом

  1. используя возвращение в начале метода

  2. используя ternary условие (не знаю, как использовать его в данном случае)

  3. использованием reduce (не уверен, что об этом, но, может быть, вместо того, forEach)

можно ли использовать его в следующем коде?

get: function(document, oData) { 
     var self = this; 
     var oInnerHTML; 
     if (oData) { 
      var oParsedHTML = this._parseHtml(document); 
      oInnerHTML = oParsedHTML; 
      oData.forEach(function(configEntry) { 
       oInnerHTML = self._routeExtentionTypes(configEntry, oInnerHTML); 
      }); 
      oInnerHTML = this._convertBackToHtml(oInnerHTML); 
     } else { 
      oInnerHTML = document; 
     } 
     return oInnerHTML 
    } 

Что код делает это

  1. получать HTMLString и разобрать его
  2. продлить его в соответствии с cofigEntry и оригинальный HTML
  3. , когда запись конфигурации было сделано он конвертируется обратно в HTML
+0

что такое 'self._routeExtentionTypes (configEntry, oInnerHTML);' делать? –

+0

@NinaScholz - это возвращает расширенный HTML, вход - configEntry, который является экземпляром массива объектов, а oInnerHTML - это оригинальный html, который я отправляю и возвращаю расширенный HTML –

+1

@NinaScholz - он отвечает на ваш вопрос? –

ответ

1

Думаю, вы можете попробовать это с Array#reduce().

В основном сокращение делает то, что вы хотите. Он принимает начальное значение и выполняет итерацию массива и возвращает требуемое значение.

Бывший код

var oParsedHTML = this._parseHtml(document); 
    oInnerHTML = oParsedHTML; 
oData.forEach(function(configEntry) { 
    oInnerHTML = self._routeExtentionTypes(configEntry, oInnerHTML); 
}); 

convertes к

this._convertBackToHtml(oData.reduce(function (r, configEntry) { 
    return self._routeExtentionTypes(configEntry, r); 
}, this._parseHtml(document))) : 

, поскольку начальное значение теперь this._parseHtml(document) без необходимости дополнительной переменной и возвращаемое значение становится новым значением для ввода следующей итерации ,

get: function (document, oData) { 
    var self = this; 
    return oData ? 
     this._convertBackToHtml(oData.reduce(function (r, configEntry) { 
      return self._routeExtentionTypes(configEntry, r); 
     }, this._parseHtml(document))) : 
     document; 
} 
+0

Спасибо, я попробую сейчас, кстати, я обновляю вопрос с дополнительной информацией о том, что делает код ... –

+0

Спасибо, что это работает 1+! im теперь проверяя его дальше, два вопроса :) 1. Если я удалю троичный код, как выглядит код (немного сложно понять) 2. не могли бы вы немного рассказать о своем коде. –

+0

пропустить троянец, если вы уверены, что 'oData' всегда thruthy, а затем возвратите' this._convertBackToHtml (oData.reduce (function (r, configEntry) { return self._routeExtentionTypes (configEntry, r); } , this._parseHtml (document))); ' –

2

используя возвращение в начале метода

Использование возврата, когда ваш объект готовьте нужное значение. Хорошей практикой является возвращение при первой же возможности. Таким образом, наименьшее количество кода выполняется и оценивается.

В приведенном выше примере "oInnerHTML" переменная get ready со значениями на основе определенных условий удовлетворена, поэтому в этом случае вы можете вернуть ее, как только объект/переменная готовятся со значением.

с использованием ТРОЙНОГО условию

Тройной оператор является общей, когда вы присвоить значение переменного на основе простого условия или вы делаете несколько решений с очень краткими результатами. е.г

x ? y: z 

В приведенном выше примере тройной оператор может использовать, как показано ниже: (Пожалуйста, выполнить код и двойной проверки)

get: function(document, oData) { 
    var self = this;  
    return (oData) ? document : get_oInnerHTML(oData); 
}  

function get_oInnerHTML (oData){ 
    var oInnerHTML; 
    oData.forEach(function(configEntry) { oInnerHTML = self._routeExtentionTypes(configEntry, this._parseHtml(document)); }); 
    return oInnerHTML; 
} 

Приведенный выше код используется функция в трехкомпонентных условиях. Поскольку существует много строк, которые необходимо выполнить внутри условия, поэтому я создал для него отдельную функцию и использовал ее в состоянии.

с помощью уменьшения

Уменьш() метод применяет функцию от аккумулятора и каждое значение массива (слева направо), чтобы свести его к одному значению.

[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, currentIndex, array) { return previousValue + currentValue; }); 
Смежные вопросы