te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Convert operator from string type to operator type - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Convert operator from string type to operator type - Stack Overflow

programmeradmin3浏览0评论

I want to generate something like this at random.

233 + 333 = 566

I mean the first number and the operator and the second number are generated at random.

So, I wrote this code now.

var x = parseInt(Math.random()*1000),
    y = parseInt(Math.random()*1000),
    operators = ['+', '-', '*', '/'],
    operatorNum = parseInt(Math.random()*4),
    operator = operators[operatorNum],
    result;

result = x + operator + y;

But this just gives me something like "748/264" as a string. It doesn't give me the result of the calculation generated.

I suppose I need to convert operator from string to operator type. But, I don't think there is a operator type.

Edited

I'm building a Chrome extension. As per the Chrome extension policy, I'm not allowed to use the eval function.

I want to generate something like this at random.

233 + 333 = 566

I mean the first number and the operator and the second number are generated at random.

So, I wrote this code now.

var x = parseInt(Math.random()*1000),
    y = parseInt(Math.random()*1000),
    operators = ['+', '-', '*', '/'],
    operatorNum = parseInt(Math.random()*4),
    operator = operators[operatorNum],
    result;

result = x + operator + y;

But this just gives me something like "748/264" as a string. It doesn't give me the result of the calculation generated.

I suppose I need to convert operator from string to operator type. But, I don't think there is a operator type.

Edited

I'm building a Chrome extension. As per the Chrome extension policy, I'm not allowed to use the eval function.

Share Improve this question edited Sep 8, 2013 at 5:39 Ry- 225k56 gold badges492 silver badges498 bronze badges asked Sep 8, 2013 at 2:42 crzyonez777crzyonez777 1,8075 gold badges19 silver badges27 bronze badges 0
Add a ment  | 

3 Answers 3

Reset to default 10

There are no built-in operator functions in JavaScript, but you can make your own pretty easily:

var operators = {
    '+': function(a, b) {
        return a + b;
    },
    '*': function(a, b) {
        return a * b;
    },
    ....
};

And then call the appropriate operator:

operators['+'](4, 7);  // 11

But here, you can just use eval and treat your string as JavaScript code:

eval('2 + 2');  // 4

Evaluate it:

result = eval(x + operator + y);

EDIT

Since you can't use eval, you need to build your own math functions. You can just specify the four functions inside that array (if you don't actually need to know their names), like:

myFunctions = [
    function(a, b){return a+b;}, 
    function(a, b){return a-b;}, 
    function(a, b){return a/b;}, 
    function(a, b){return a*b;}
];

Then just randomly pick one and call it with your x and y variables as parameters, just like you did before: result = myFunctions[parseInt(Math.random()*4)](x, y);.

I think the solution here is to use eval()

result = eval(x + operator + y)

In this case it is safe to use eval, but Be warned - It is a dangerous function to use

发布评论

评论列表(0)

  1. 暂无评论