SOURCE

console 命令行工具 X clear

                    
>
console
function stringToBytes ( str ) {
  var ch, st, re = [];
  for (var i = 0; i < str.length; i++ ) {
    ch = str.charCodeAt(i);
    st = []; 
    do {
      st.push( ch & 0xFF );
      ch = ch >> 8;
    }
    while ( ch );
    re = re.concat( st.reverse() );
  }
  return re;
}

function multiply(m, n) {
    return Number(BigInt(m) * BigInt(n) & BigInt(0xffffffff));
}

function murmurhash(str, seed = 0) {
    let fl = 0xffffffff
    let data = stringToBytes(str);
    let len = data.length;
    let m = 0x5bd1e995 & fl;
    let r = 24;
    let h = seed ^ len & fl;
    let len_4 = len >> 2 & fl;
    let i;
    let len_m;
    let left;
    for(i = 0; i < len_4; i++) {
        let i_4 = i << 2 & fl;
        let k = data[i_4 + 3] & fl;
        k = k << 8 & fl;
        k = k | (data[i_4 + 2] & 0xff) & fl;
        k = k << 8 & fl;
        k = k | (data[i_4 + 1] & 0xff) & fl;
        k = k << 8 & fl;
        k = k | (data[i_4 + 0] & 0xff) & fl;
        k = multiply(k, m);
        k = k ^ (k >> r) & fl;
        k = multiply(k, m);
        h = multiply(h, m);
        h = h ^ k & fl;
        
    }
    console.log("into..." + h)
    // avoid calculating modulo
    len_m = len_4 << 2 & fl;
    left = len - len_m;
    console.log(left)
    if (left != 0) { 
        if (left >= 3) {
            h ^= data[len - 3] << 16;
        }
        if (left >= 2) {
            h ^= data[len - 2] << 8;
        }
        if (left >= 1) {
            h ^= data[len - 1];
        }
        h *= m;
    }
    h = h ^ (h >> 13) & fl;
    h = h * m & fl; 
    h = h ^ (h >> 15) & fl;
    console.log(str, data, len, seed, h)
    return h;
}

const hash = murmurhash("jd_6be4dd91dd4ca", 0)

console.log(hash)

<script src="https://cdn.bootcdn.net/ajax/libs/murmurhash3js/3.0.1/murmurHash3js.js"></script>