如果这个问题重复,我很抱歉,但我真的不知道如何搜索它。对于专业的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检查计算)
答案 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
};