我使用以下代码,这很有效,但在阅读了JS之后(我很新),我注意到了3件事。
-
在方法开始时使用返回
-
使用
ternary
条件(不确定在这种情况下如何使用) -
使用
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
}
代码所做的是
- 获取HtmlString并对其进行解析
- 根据cofigEntry和原始HTML对其进行扩展
- 配置条目完成后,它会转换回HTML
在方法的开头使用return
当您的对象准备好具有所需值时,请使用return。尽早返回是很好的做法。这样,执行和评估的代码数量最少。
在上面的示例"oInerHTML"中,变量在满足基于值的特定条件的情况下做好准备,因此在这种情况下,只要对象/变量准备好了值,就可以返回它。
使用三元条件
当你根据一个简单的条件为变量赋值,或者你做出多个结果非常简短的决策时,三元运算符很常见。例如
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; });
我认为,您可以在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))) :
因为开始值现在是CCD_ 4而不需要额外的变量,并且返回值成为下一次迭代的新输入值。
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;
}