2015-08-20 3 views
0

Итак, у меня есть функция, которая проверяет, является ли последний символ в строке арифметическим оператором (+, -, *, /), и если это так, он должен немедленно вернуться из функции. Если нет, знак вычитания должен быть добавлен к строке. Однако возникает только второй случай, и я не могу понять, почему. Если бы кто-нибудь мог дать некоторое представление, я был бы очень благодарен.Как успешно выйти из функции в javascript?

$("#subtract").click(function() { 
     var original=$("#display").text(); 
     var sliced=original.slice(0,original.length - 1); 
     var signs=["+","-","*","/"]; 
     var charpos=sliced.charAt(sliced.length -1); 

     if ((charpos === signs[0]) || (charpos === signs[1]) || (charpos === signs[2]) || (charpos === signs[3])) { 
      return; 
     } 
     else { 
      var newdisplay=sliced + "-"; 
      $("#display").text(newdisplay); 
     } 

    }); 
+0

Похоже, вы получаете второй к последнему символу 'original', потому что вы отрезают последний символ в' sliced' и получить последний символ '' sliced' с charpos'. Это намеренно? Если да, то я не понимаю, что не так, так что вы можете включить пример того, что вы ввели в '$ (« # display »), чтобы я мог протестировать дальше? –

+1

Вы печатали их на своей консоли и видели, правильно ли вы получили символы? 'console.log()' –

+0

изменить 'original.slice (0, original.length - 1)' to 'original.slice (0, original.length)'. – honerlawd

ответ

0

Вы нарезаете вход, который удаляет последний символ, затем используя charAt и получая секунд до последнего символов.

var original=$("#display").text(); // "foobar" 
var sliced=original.slice(0,original.length - 1); // "fooba" 
var charpos=sliced.charAt(sliced.length -1); // "a" -- we lost the "r" 

Вам нужно только позвонить charAt и работать с последним символом (или, если вы предпочитаете slice, он способен принять отрицательное число и отступиться строкой).

Во-вторых, поскольку signs представляет собой массив, вы можете использовать indexOf для проверки каждого элемента. например

var original = $('#display').text(); 
var signs = ["+","-","*","/"]; 
var lastChar = original.slice(-1); // OR original.charAt(original.length - 1); 

// Check for the lastChar in the signs array 
if (signs.indexOf(lastChar) != -1){ // -1 == not found 
    return; // short exit 
} 
+0

Спасибо за метод indexOf для быстрого сканирования массива. Я забыл, что на самом деле я добавлял дополнительное значение в # disisplay перед проверкой, но теперь я исправил его. Благодаря! – user3394907

0
var original=$("#display").text(); 
var sliced=original.slice(0,original.length - 1); 

вторая линия избавляется от последнего символа в строке. так что вы даже не можете проверить, что это было. просто избавиться от него и изменить первую строку

var sliced=$("#display").text(); 

и все должно работать нормально

0

Вместо

if ((charpos === signs[0]) || (charpos === signs[1]) || (charpos === signs[2]) || (charpos === signs[3])) { 
     return; 
    } 

попробовать

if ($.inArray(charpos, signs) > -1) { 
    return; 
} 

Прежде всего, никогда не перечислить элементы из массива таким образом - легко пропустить предметы таким образом. Во-вторых, точное сравнение экземпляров (===) не будет срабатывать, если вы не сравните точные строки.

Кроме того, рассмотрите вопрос о том, как вы извлекаете последний символ.

Смежные вопросы