你如何比较两个函数在Javascript中是否表现相同?

时间:2015-04-08 22:00:54

标签: javascript algorithm function comparison

如果我有2个函数作为变量,f1和f2 - 我如何确定2个函数对所有输入的行为是否相同?也就是说,它们将为所有输入返回相同的值。

3 个答案:

答案 0 :(得分:0)

任意功能都不可能。

例如,考虑Collat​​z功能( n 如果 n 是奇数或 n / 2 < 3n + 1 em>如果 n 是偶数)。假设所有正整数最终都在循环 4-> 2-> 1 中结束。假设您的函数用于指示输入到达的周期(或指示它是否永远不会达到周期)。 f1可能只打印 4-&gt; 2-&gt; 1 ,但f2可能会重复应用该功能,直到检测到一个周期(还有一些其他情况可以确定它是否存在)不在一个循环中)。目前还没有f1f2给出不同答案的已知输入,但不知道这样的输入是否存在。

答案 1 :(得分:0)

一种方法是编写函数,该函数比较已经给出相同输入参数的一些其他函数的输出。可以将可能的输入参数推送到数组中以简化该过程。有点像...

var func1 = function(inputValue) {
    // return some stuff
};
var func2 = function(inputValue) {
    // return some stuff
};
var inputArray = [/* some input values */];

function compare(array) {
    var isSame = false;
    for (var i = 0; i < array.length; i++) {
        if (func1(array[i]) === func2(array[i]) {
            isSame = true
        } else {
            return i
        }
    }
    return isSame
}
var result = compare(inputArray);

if (typeof result === 'number') {
    alert('Comparison failed at inputArray['+result+'] : ' + inputArray[result])
} else {
    alert('Comparison success!')
}

compare()函数返回两个不同的类型结果,具体取决于if条件。如果满足所有if条件,我们得到boolean(true),否则for循环停止并返回比较失败的索引number - 然后可以用来指回输入破坏链条的价值。

答案 2 :(得分:0)

不,你不能。给定函数的可能输入数量是无限的。因此,除非你知道它们之间的某种关系,否则有限数量的值都不会保证。