-1

この質問が重複している場合は申し訳ありませんが、検索方法がわかりません。この質問は、専門の JavaScript プログラマーにとっては「奇妙」に聞こえるかもしれませんが、私はそうではありません。

私は基本的に、別のコード行を無駄にすることなく、「1 行のリターン」を実行しようとしています。私はそれが良くないことを知っています、そして以下は本番用のコードではありません:

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で時々同じことをしたことを覚えています。

編集:答えの前に質問を読むのはそれほど「難しい」とは思いません...私はそれが可能かどうか尋ねています。それが正しい、見栄えが良いなどと言っているのではありません。

(ちなみにこれがルーンチェック計算です)

4

6 に答える 6

10

VariableDeclaration は式ではありません。直前に宣言してください。

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

    // ...

    return (mod = sum % 10 ...
}
于 2013-05-24T19:02:37.950 に答える
3

これを行う唯一の方法は次のとおりだと思います。

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

1 行余分なコードを気にする人はいますか? なぜそれが重要なのですか?

于 2013-05-24T19:02:39.970 に答える
3

あなたはここで頑張りすぎていると思います。var modreturn ステートメントの前に移動するだけです。ここにもう 1 行コードを記述したからといって、ソフトウェアの神々に打ちのめされることはありません。簡潔さよりも明快さ。

于 2013-05-24T19:03:27.377 に答える
3

JavaScript は PHP ではありません

var mod = sum % 10;
return (mod === 0) ? 0 : 10 - mod;
于 2013-05-24T19:06:50.607 に答える