2017-07-17 81 views
-2

我建立使用JavaScript计算器应用程序存在。当用户点击一个运营商(+, - ,*,/)时,我想先检查是否有其他运营商已经进入。我将所有的按钮存储在一个数组中。如果一个操作符已经存在,那么第一个操作将会是用被按下的操作符替换操作符(如果没有第二个编号存在来执行操作)或者执行等于操作,然后将新操作符添加到结果。例如,如果用户输入“1 + 1”然后输入另一个“+”运算符,我希望它执行1 + 1操作,然后将下一个操作存储为“2 + [任何下一个输入]”。遍历对象的属性,以检查是否有在阵列

我有存储与每个运营商相关联的功能的对象。是否可以这样做:

var ops = { 
    "+": function(a,b) {return a + b}, 
    "-": function(a,b) {return a - b}, 
    // etc... 
}; 

// And then in the code 
if (log.indexOf(ops) >= 0) { // perform math, then add new op} 

最后一行是检查日志是否已经包含其中一个操作符。像这样的简写方法是可能的,还是我需要迭代对象属性?

这里是第一评议什么,我看着看着,试图在object.keys(OPS)的方式推荐JSFiddle

+0

object.keys(OPS) – ndugger

+0

您是否在寻找:'如果(在日志OPS){ '?您需要展示更多代码才能看到卡住的位置。 – trincot

+0

ops.hasOwnProperty(运营商) – Zac

回答

1

之一很多方法可以做到这将是:

log.some(x => Object.keys(ops).includes(x)) 

请参阅Array.prototype.includes()Array.prototype.some()

+0

这工作,但只有当我通过每个对象属性迭代。我正在寻找一种速记方式。例如,将对象的所有键都传递给includes()数组并一次检查所有属性。 –

+0

你的意思是像'Object.keys(ops).includes(searchElement)'吗? – Arash

+0

查看这个[小提琴](https://jsfiddle.net/gregrholden/sbobaszj/5/)的意思。感谢 –

相关问题