Javascript返回和var的三元运算符,可能吗?

时间:2013-05-24 19:01:06

标签: javascript

如果这个问题重复,我很抱歉,但我真的不知道如何搜索它。对于专业的JavaScript程序员来说,这个问题可能听起来很“奇怪”,但我不是。

我基本上是在尝试进行“一行返回”,而不会浪费另一行代码。我知道它不好,而且以下它不是生产代码:

var _ = require('underscore');

module.exports = function (digits) {
    if (!/^\d+$/.test(digits)) return undefined;

    var precomp = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9];

    var sum = _.reduce(digits.toString(), function (mem, dgt, idx) {
        return mem + (idx % 2 == 0 ? parseInt(dgt) : precomp[dgt]);
    }, 0);

    return (var mod = sum % 10 == 0) ? 0 : 10 - mod; // Error
};

最后一行因var关键字而引发错误。我记得在PHP中有时会做同样的事情。

编辑:在回答之前,我认为这个问题并不那么“难”......我在问这是否有可能,我不是说它是正确的,好看的,或​​者不管。

(顺便说一下这是luhn检查计算)

6 个答案:

答案 0 :(得分:10)

VariableDeclaration不是表达式。请先申报。

module.exports = function (digits) {
    var mod;

    // ...

    return (mod = sum % 10 ...
}

答案 1 :(得分:3)

我认为你这样做的唯一方法是:

var mod = sum % 10;
return (mod == 0) ? 0 : 10 - mod;

谁在乎一行额外代码?为什么这很重要?

答案 2 :(得分:3)

我觉得你在这里努力了。只需在return语句前移动var mod即可。你不会被软件之神打死,因为这里有一行代码。清晰而简洁。

答案 3 :(得分:3)

JavaScript不是PHP

var mod = sum % 10;
return (mod === 0) ? 0 : 10 - mod;

答案 4 :(得分:2)

到目前为止,我看到你不喜欢任何答案。避免首先声明变量的一种方法是,你可能不喜欢这样:

return (sum % 10 == 0) ? 0 : 10 - (sum % 10);

这不需要额外的一行,但确实需要额外的mod。


另一个可能使代码容易混淆的选项是向函数添加一个伪参数:

module.exports = function (digits, mod) {
    /* code */
    return (mod = sum % 10) == 0 ? 0 : 10 - mod; // Error
};

答案 5 :(得分:1)

由于您未将sum用于任何其他目的,因此您可以移动%运算符,执行以下操作:

var _ = require('underscore');

module.exports = function (digits) {
    if (!/^\d+$/.test(digits)) return undefined;

    var precomp = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9];

    var sum = _.reduce(digits.toString(), function (mem, dgt, idx) {
        return mem + (idx % 2 == 0 ? parseInt(dgt) : precomp[dgt]);
    }, 0) % 10;

    return (sum == 0) ? 0 : 10 - sum; // Error
};