我正在遍历代数,并尝试创建一个JavaScript测试器函数,该函数比较两个方程并确定它们是否被视为关联属性。换句话说,如果将(a + b)+ c与a +(b + c)分组,则结果将相同。仅限乘法和加法。
到目前为止,我已经尝试构建一个简单的函数来解析最终值是否等于比较的方程值。我想要的是,如果我能够在没有括号的情况下比较两个方程。认为我需要查找正则表达式...但是在方向方面寻求帮助。
let a = 1,
b = 2,
c = 3,
number1 = (a * b) * c,
number2 = a * (b * c);
function isAssociative(num1, num2) {
let answer = num1 === num2;
return `Are ${num1} and ${num2} associative... ${answer}`;
}
console.log(isAssociative(number1, number2));
当前,这导致“ Are 6和6关联... true”。这就是我想要的,但是如果我在调用函数时将第二个参数更改为静态6,那么这不是关联组合,我希望它返回false。
答案 0 :(得分:1)
您可以使用Mathjs和simplify方法:
console.clear();
term_a = 'a + ( b + c )'
term_b = '( a + b ) + c';
tree_a = math.simplify(term_a);
tree_b = math.simplify(term_b);
console.log(term_a, tree_a.equals(tree_b) ? 'equals' : 'differs from', term_b);
term_a = 'a + ( b + c + d )'
term_b = '( a + b ) + c';
tree_a = math.simplify(term_a);
tree_b = math.simplify(term_b);
console.log(term_a, tree_a.equals(tree_b) ? 'equals' : 'differs from', term_b);
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/5.4.2/math.min.js"></script>
答案 1 :(得分:0)
我找到了满意的答案。
let number1 = prompt('Enter an equation').toString().replace(/[^0-9,+,*]+/g,''),
number2 = prompt('Enter equation 2').toString().replace(/[^0-9,+,*]+/g,'');
function isAssociative (num1, num2) {
if (num1 === num2) {
return eval(num1) === eval(num2);
} else {
return false;
}
}
alert(isAssociative(number1, number2));
我可以等待数字以字符串形式输入函数,首先检查括号以确认它是否合格...如果存在括号,则可以执行regEx代码,如果不存在则返回'not在这一点上。现在,它的工作和我想要的一样。