首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript npm安装Heroku,引用错误未定义

JavaScript npm安装Heroku,引用错误未定义
EN

Stack Overflow用户
提问于 2018-09-01 23:15:37
回答 3查看 69关注 0票数 0

代码语言:javascript
复制
document.getElementById("HC").innerHTML = String(hammingCode.encode("11"));


console.log("Encode 1111: ", hammingCode.encode("1111"));

我正在尝试在我的JavaScript代码中使用This汉明代码npm库,但是我没有太多从npm安装的经验。我已经做了npm安装hamming-code,它设法安装了我相信,我的package.json也更新了"hamming-code":"0.0.2“。当我开始输入hammingCo...它提供了示例,编码和解码等,但是当我尝试编码一个简单的字符串时,我得到了控制台错误消息'Uncaught (in promise) ReferenceError: hammingCode is not defined‘。该应用程序是通过heroku部署的。

我是否需要添加任何额外的源代码,或者包括'var hammingCode = require("hamming-code")'?我已经尝试将其包含在内,但仍然无法使其正常工作。

我有一个index.html,我的大部分JavaScript都在那里,我想要使用汉明代码的地方,还有一个index.js,我相信我的大部分服务器代码都在那里。提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2018-09-03 17:43:29

您需要在html文件中包含hamming-code脚本。例如,检查下面的示例。

代码语言:javascript
复制
/**
 * hammingEncode - encode binary string input with hamming algorithm
 * @param {String} input - binary string, '10101'
 * @returns {String} - encoded binary string
 */
function hammingEncode(input) {
	if (typeof input !== 'string' || input.match(/[^10]/)) {
		return console.error('hamming-code error: input should be binary string, for example "101010"');
	}

	var output = input;
	var controlBitsIndexes = [];
	var controlBits = [];
	var l = input.length;
	var i = 1;
	var key, j, arr, temp, check;

	while (l / i >= 1) {
		controlBitsIndexes.push(i);
		i *= 2;
	}

	for (j = 0; j < controlBitsIndexes.length; j++) {
		key = controlBitsIndexes[j];
		arr = output.slice(key - 1).split('');
		temp = chunk(arr, key);
		check = (temp.reduce(function (prev, next, index) {
			if (!(index % 2)) {
				prev = prev.concat(next);
			}
			return prev;
		}, []).reduce(function (prev, next) { return +prev + +next }, 0) % 2) ? 1 : 0;
		output = output.slice(0, key - 1) + check + output.slice(key - 1);
		if (j + 1 === controlBitsIndexes.length && output.length / (key * 2) >= 1) {
			controlBitsIndexes.push(key * 2);
		}
	}

	return output;
}


/**
 * hammingPureDecode - just removes from input parity check bits
 * @param {String} input - binary string, '10101'
 * @returns {String} - decoded binary string
 */
function hammingPureDecode(input) {
	if (typeof input !== 'string' || input.match(/[^10]/)) {
		return console.error('hamming-code error: input should be binary string, for example "101010"');
	}

	var controlBitsIndexes = [];
	var l = input.length;
	var originCode = input;
	var hasError = false;
	var inputFixed, i;
	
	i = 1;
	while (l / i >= 1) {
		controlBitsIndexes.push(i);
		i *= 2;
	}

	controlBitsIndexes.forEach(function (key, index) {
		originCode = originCode.substring(0, key - 1 - index) + originCode.substring(key - index);
	});

	return originCode;
}

/**
 * hammingDecode - decodes encoded binary string, also try to correct errors
 * @param {String} input - binary string, '10101'
 * @returns {String} - decoded binary string
 */
function hammingDecode(input) {
	if (typeof input !== 'string' || input.match(/[^10]/)) {
		return console.error('hamming-code error: input should be binary string, for example "101010"');
	}

	var controlBitsIndexes = [];
	var sum = 0;
	var l = input.length;
	var i = 1;
	var output = hammingPureDecode(input);
	var inputFixed = hammingEncode(output);


	while (l / i >= 1) {
		controlBitsIndexes.push(i);
		i *= 2;
	}

	controlBitsIndexes.forEach(function (i) {
		if (input[i] !== inputFixed[i]) {
			sum += i;
		}
	});

	if (sum) {
		output[sum - 1] === '1' 
			? output = replaceCharacterAt(output, sum - 1, '0')
			: output = replaceCharacterAt(output, sum - 1, '1');
	}
	return output;
}

/**
 * hammingCheck - check if encoded binary string has errors, returns true if contains error
 * @param {String} input - binary string, '10101'
 * @returns {Boolean} - hasError
 */
function hammingCheck(input) {
	if (typeof input !== 'string' || input.match(/[^10]/)) {
		return console.error('hamming-code error: input should be binary string, for example "101010"');
	}

	var inputFixed = hammingEncode(hammingPureDecode(input));

	return hasError = !(inputFixed === input);
}

/**
 * replaceCharacterAt - replace character at index
 * @param {String} str - string
 * @param {Number} index - index
 * @param {String} character - character 
 * @returns {String} - string
 */
function replaceCharacterAt(str, index, character) {
  return str.substr(0, index) + character + str.substr(index+character.length);
}

/**
 * chunk - split array into chunks
 * @param {Array} arr - array
 * @param {Number} size - chunk size
 * @returns {Array} - chunked array
 */
function chunk(arr, size) {
	var chunks = [],
	i = 0,
	n = arr.length;
	while (i < n) {
		chunks.push(arr.slice(i, i += size));
	}
	return chunks;
}

/* 
(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD.
        define(factory);
    } else if (typeof module === 'object' && module.exports) {
        // Node. Does not work with strict CommonJS, but
        // only CommonJS-like environments that support module.exports,
        // like Node.
        module.exports = factory();
    } else {
        // Browser globals (root is window)
        root.hammingCode = factory();
    }
}(this, function () {
    return {
      encode: hammingEncode,
      pureDecode: hammingPureDecode,
      decode: hammingDecode,
      check: hammingCheck
    };
})); */


console.log();
document.getElementById("code").innerHTML	 =
hammingEncode('101010101');
代码语言:javascript
复制
<div id="code">
</div>

票数 3
EN

Stack Overflow用户

发布于 2018-09-01 23:34:32

你的代码示例有点差,我猜你是在网页加载的javascript中工作(基于"document.getElementById...")

确保你在html中加载脚本,我建议你在标签中加载,确保在你的js之前加载库,除非你正在使用像webpack这样的捆绑工具,否则我怀疑使用require是否可以正常工作。

希望对你有帮助,如果没有帮助,请给我们更多的信息来帮助你。

票数 1
EN

Stack Overflow用户

发布于 2018-09-03 17:30:45

您的文件在客户端,没有对象hammingCode,您是否尝试添加到您的html:

代码语言:javascript
复制
<script src="https://cdn.rawgit.com/georgelviv/hamming-code/master/index.js"></script>

我的建议是将hamming-code下载到您的服务器并从html中包含它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52129472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档