我需要堆叠二进制文件。需要使用无原型。使用此代码时,我收到的错误是remStack.push不是函数。我在这里错过了什么?
function Stack() {}
function divideBy2(decNumber) {
var remStack = new Stack(),
rem,
binaryString = '';
while (decNumber > 0) {
rem = Math.floor(decNumber % 2);
remStack.push(rem);
decNumber = Math.floor(decNumber / 2)
}
while (!remStack.isEmpty()) { //{5}
binaryString += remStack.pop().toString();
}
return binaryString;
}
console.log(divideBy2(233));
正如其他人所指出的,你的Stack
类没有push
,pop
,isEmpty
函数。
以下是我将如何做到这一点(不使用任何外部库并使用JS Array实现Stack类)。
function Stack() {
this.myStack = [];
this.push = function(val) {
this.myStack[this.myStack.length] = val;
};
this.isEmpty = function() {
return this.myStack.length <= 0;
};
this.pop = function() {
return this.myStack.splice(this.myStack.length - 1, 1)[0];
};
}
function divideBy2(decNumber) {
var remStack = new Stack(), rem, binaryString = '';
while (decNumber > 0) {
rem = Math.floor(decNumber % 2);
remStack.push(rem);
decNumber = Math.floor(decNumber / 2)
}
while (!remStack.isEmpty()) { //{5}
binaryString += remStack.pop().toString();
}
return binaryString;
}
console.log(divideBy2(233));
如果你有选择编写ES6,这就是我的选择。
class Stack {
myStack = [];
push = val => this.myStack[this.myStack.length] = val;
isEmpty = this.myStack.length <= 0;
pop = this.myStack.splice(this.myStack.length - 1, 1)[0];
reduce = reducer => this.myStack.reverse().reduce(reducer);
}
const buildStack = (remStack, decNumber) => {
if (decNumber > 0) {
remStack.push(Math.floor(decNumber % 2));
buildStack(remStack, Math.floor(decNumber / 2));
}
};
const divideBy2 = decNumber => {
const remStack = new Stack();
buildStack(remStack, decNumber);
return remStack.reduce((acc, v) => `${acc}${v}`, '');
}
console.log(divideBy2(233));
稍作修改即可。
function Stack() {}
function divideBy2(decNumber) {
var remStack = []//new Stack(),
var rem,
binaryString = '';
while (decNumber > 0) {
rem = Math.floor(decNumber % 2);
remStack.push(rem);
decNumber = Math.floor(decNumber / 2)
}
while (!remStack.length == 0) { //{5}
binaryString += remStack.pop().toString();
}
return binaryString;
}
console.log(divideBy2(233));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
在这里,我发现了一些错误。