如何绕过.push不是javascript中的函数?

问题描述 投票:0回答:3

我需要堆叠二进制文件。需要使用无原型。使用此代码时,我收到的错误是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));
javascript function binary stack
3个回答
0
投票

正如其他人所指出的,你的Stack类没有pushpopisEmpty函数。

以下是我将如何做到这一点(不使用任何外部库并使用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));

1
投票

稍作修改即可。

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>
For more info

0
投票

在这里,我发现了一些错误。

  1. 你必须从Stack函数返回数组。其实你我需要有功能而不是对象。使用new运算符,您正在使用Stack的实例。在这里,在Stack Object中我已经创建了一个数组变量;
  2. 在数组中,你不能有空函数。你需要计算它的价值。在这里,我做了<1条件 function Stack(){var myarray = [];返回myarray; function divBy2(decNumber){var remStack = Stack(),rem,binaryString =''; while(decNumber> 0){rem = Math.floor(decNumber%2); remStack.push(REM); decNumber = Math.floor(decNumber / 2)} while(!remStack.length <1){// {5} binaryString + = remStack.pop()。toString(); } return binaryString; } console.log(divideBy2(233));
© www.soinside.com 2019 - 2024. All rights reserved.