Как обойти .push не является функцией в JavaScript? - PullRequest
0 голосов
/ 09 сентября 2018

Мне нужно сложить двоичный файл. Нужно использовать не прототип. При использовании этого кода я получаю сообщение об ошибке, что 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));

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

здесь я нашел какую-то ошибку.

  1. вы должны вернуть массив из функции Stack. На самом деле вы должны иметь функцию, а не объект. с новым оператором вы делаете экземпляр стека. Здесь, в объекте стека, я сделал одну переменную массива для возврата;

  2. В массиве не может быть пустой функции. Вы должны посчитать это значение. Здесь я выполнил <1 условие </p>

    function Stack () {var myarray = []; вернуть myarray; } functiondivBy2 (decNumber) { var remStack = Stack (), бэр, binaryString = ''; while (decNumber> 0) { rem = Math.floor (decNumber% 2); remStack.push (бэр); decNumber = Math.floor (decNumber / 2) } while (! remStack.length <1) {// {5} binaryString + = remStack.pop (). toString (); } возврат двоичной строки; } console.log (divideBy2 (233)); </p>

0 голосов
/ 09 сентября 2018

Как отмечают другие, ваш класс Stack не имеет функций push, pop, isEmpty.

Вот как я это сделаю (без использования какой-либо внешней библиотеки и реализации класса Stack с использованием JS Array).

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));
0 голосов
/ 09 сентября 2018

С небольшой модификацией вы могли бы иметь.

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>
Для получения дополнительной информации
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...