避免在函数内部复制代码(仅适用于Javascript)

时间:2019-02-22 01:34:41

标签: javascript html arrays object ecmascript-6

我想从按钮单击的文本框字段中获取值,该值会调用执行操作并将结果存储在另一个文本字段中的函数。我有六个操作-加,减,乘,除,最大值,最小值,因此有六个功能。我必须多次使用从文本字段获取值的代码来执行操作。我想一次使用该代码,并获取函数中传递给我的值以得到不同的结果。下面的代码将使其清楚-

job_list = ['assistant manager', 'salesperson', 'doctor', 'production manager', 'sales manager', 'schoolteacher', 'mathematics teacher']

def search_multiple_words(search_words):
    search_words = [search_words]

    for line in job_list:
        if any(word in line for word in search_words):
            print(line)

search_words = input("input keywords: ")
search_multiple_words(search_words)

,依此类推...用于除法,最大值,最小值和平均值。    (此处)每个函数中的前三行代码相同。 用什么方法可以做到这一点? (数组或返回方法会起作用吗?)

4 个答案:

答案 0 :(得分:2)

一个简单的解决方案是使用一种新方法,该方法返回包含a和b的对象。

var res = document.getElementById('res');
function getWidthAndHeight() {
  return {
    w: parseInt(document.getElementById("num1").value),
    h: parseInt(document.getElementById("num2").value)
  };
}

因此,您的第一种方法可能是:

function sum() {
    var sizes = getWidthAndHeight();
    res.value = sizes.w + sizes.h;
}

就像Pixelmo在另一个答案中一样,将res变量设置在其他范围内也将是有益的。更新了上面的答案...

答案 1 :(得分:1)

您可以使用解构函数:

function values() {
    return [parseInt(document.getElementById("num1").value), parseInt(document.getElementById("num2").value), document.getElementById("res")];
}

然后使用其他功能:

function sum() {
    var [a, b, res] = values();
    res.value = a + b;
}

答案 2 :(得分:1)

一个稍微复杂但不太重复的解决方案是拥有包含重复代码的函数的基本版本,然后传入要应用于数字的函数:

function computeWith(op) {
    var a = parseInt(document.getElementById("num1").value);
    var b = parseInt(document.getElementById("num2").value);

    var res = document.getElementById("res");
    res.value = op(a, b);
}

然后使用lambda或现有函数传递操作符:

function multiply() {
    computeWith((a, b) => a * b);
}

function add() {
    computeWith((a, b) => a + b);
}

function average() {
    computeWith((a, b) => (a + b) / 2);
}

尽管这些函数现在很小,但是可以说它们不需要存在,除非您喜欢将名称附加到代码上,或者它们已在多个地方使用。

答案 3 :(得分:0)

您可以获取操作类型作为参数,并在函数中对该类型进行操作。

function op(type)
{
  var a = parseInt(document.getElementById("num1").value);
  var b = parseInt(document.getElementById("num2").value);
  var res = document.getElementById("res");
  
  switch (type) {
  case 'sum':
    res.value = a + b;
    break;
  // so on...
  }
}

op('sum')
<input id="num1" value="1">
<input id="num2" value="2">
<input id="res">