【问题标题】:How to get around .push is not a function in javascript?如何绕过 .push 不是 javascript 中的函数?
【发布时间】:2018-09-09 16:18:03
【问题描述】:

我需要堆叠二进制文件。需要使用无原型。使用此代码时,我收到 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


【解决方案1】:

正如其他人所指出的,您的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));

【讨论】:

  • 正是我想要的。谢谢!
【解决方案2】:

稍作修改,您就可以拥有 .

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));
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;
For more info

【讨论】:

  • 感谢您的帮助。我太新了,无法投票,但这回答了我的问题。
【解决方案3】:

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

  1. 你必须从 Stack 函数返回数组。其实你我需要没有功能和对象。使用 new 运算符,您正在创建 Stack 的实例。在这里,在堆栈对象中,我创建了一个要返回的数组变量;

  2. 数组中不能有空函数。你需要计算它的价值。在这里,我已经完成了

    function Stack() { var myarray=[];返回我的数组; } 函数divideBy2(decNumber){ var remStack = Stack(), 雷姆, 二进制字符串 = ''; 而 (decNumber > 0) { rem = Math.floor(decNumber % 2); remStack.push(rem); decNumber = Math.floor(decNumber / 2) } while (!remStack.length

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-08
    • 2019-12-03
    • 1970-01-01
    • 2019-12-11
    • 2021-05-17
    • 2019-08-08
    • 2020-08-10
    • 1970-01-01
    相关资源
    最近更新 更多