删除方法中的冗余代码

时间:2016-04-12 06:29:27

标签: javascript jquery mapreduce ternary-operator

我使用下面的代码,但在阅读了JS(我相当新的)后,我发现了3件事。

  1. 在方法开头使用return

  2. 使用self.venueImageView.circleMe() 条件(在这种情况下不确定如何使用它)

  3. 使用ternary(不确定此但可能代替forEach)

  4. 是否可以在以下代码中使用它?

    reduce

    代码正在做什么

      
        
    1. 获取HtmlString并解析它
    2.   
    3. 根据cofigEntry和原始HTML
    4. 扩展它   
    5. 当配置条目完成后,它将转换回HTML
    6.   

2 个答案:

答案 0 :(得分:1)

在方法开头使用return

当对象准备好所需值时使用return。优秀的做法是尽早回来。这样就可以执行和评估最少量的代码。

在上面的示例" oInnerHTML "变量准备好基于满足某些条件的值,所以在这种情况下,只要对象/变量准备好值,就可以返回它。

使用三元条件

当您根据简单条件为变量分配值或者您正在做出具有非常简短结果的多个决策时,三元运算符很常见。 e.g

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;
}  

上面的代码在三元条件下使用了一个函数。因为有许多行需要在条件内执行所以我为它创建了分离函数并在条件中使用。

使用reduce

reduce()方法对累加器和数组的每个值(从左到右)应用一个函数,将其减少为单个值。

[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, currentIndex, array) { return previousValue + currentValue; });

答案 1 :(得分:0)

我认为,您可以使用Array#reduce()尝试。

基本上减少就是做你想要的。它需要一个起始值并迭代一个数组并根据需要返回一些值。

前一段代码

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

转换为

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;
}