sql >> データベース >  >> NoSQL >> MongoDB

JavaScript-24桁の16進数を10進数に変換し、1を加算してから、元に戻しますか?

    このバージョンは入力文字列である限り文字列を返すため、入力が「ffffffff」のようなものである場合、オーバーフローは無視されます。

    function hexIncrement(str) {
        var hex = str.match(/[0-9a-f]/gi);
        var digit = hex.length;
        var carry = 1;
    
        while (digit-- && carry) {
            var dec = parseInt(hex[digit], 16) + carry;
            carry = Math.floor(dec / 16);
            dec %= 16;
            hex[digit] = dec.toString(16);
        }
        return(hex.join(""));
    }
    
    document.write(hexIncrement("55a98f19b27585d81922ba0b") + "<BR>");
    document.write(hexIncrement("ffffffffffffffffffffffff"));

    このバージョンでは、「ffffffff」などの入力が引き継がれて「100000000」になるため、入力文字列より1文字長い文字列が返される場合があります。

    function hexIncrement(str) {
        var hex = str.match(/[0-9a-f]/gi);
        var digit = hex.length;
        var carry = 1;
    
        while (digit-- && carry) {
            var dec = parseInt(hex[digit], 16) + carry;
            carry = Math.floor(dec / 16);
            dec %= 16;
            hex[digit] = dec.toString(16);
        }
        if (carry) hex.unshift("1");
        return(hex.join(""));
    }
    
    document.write(hexIncrement("55a98f19b27585d81922ba0b") + "<BR>");
    document.write(hexIncrement("ffffffffffffffffffffffff"));

    user2864740の12桁のチャンクでの作業の提案が何らかの利点を提供するかどうかを知りたいと思いました。驚いたことに、コードはもっと複雑に見えますが、実際には約2倍の速度です。ただし、最初のバージョンも1秒間に500,000回実行されるため、現実の世界で気付くようなことはありません。

    function hexIncrement(str) {
        var result = "";
        var carry = 1;
        while (str.length && carry) {
            var hex = str.slice(-12);
            if (/^f*$/i.test(hex)) {
                result = hex.replace(/f/gi, "0") + result;
                carry = 1;
            } else {
                result = ("00000000000" + (parseInt(hex, 16) + carry).toString(16)).slice(-hex.length) + result;
                carry = 0;
            }
            str = str.slice(0,-12);
        }
        return(str.toLowerCase() + (carry ? "1" : "") + result);
    }
    
    document.write(hexIncrement("55a98f19b27585d81922ba0b") + "<BR>");
    document.write(hexIncrement("000000000000ffffffffffff") + "<BR>");
    document.write(hexIncrement("0123456789abcdef000000000000ffffffffffff"));


    1. Mongodbクエリ:各アイテムの日付別の最新レコード

    2. toGMTstring()とtoUTCstring()の違いは何ですか?

    3. Node.JSとMongooseを使用してMongoDBから単純な配列にデータを取得するにはどうすればよいですか?

    4. MongoDBを使用してHerokuで独自のParseServerをホストするにはどうすればよいですか?