2015-04-10 2 views
0

Я использую подстроку переменной, чтобы определить, как разрезать строку. Строка сама по себе состоит из четырех символов и имеет прикрепленный номер. i.e «doop0»/«doop1» и т. д. Я пытаюсь использовать длину строк для определения того, нужно ли больше срезать. Например, если строка становится «doop10» срезает «10» и parseInt. но я получаю NaN возвращается, и я не знаю, почему! код у меня выглядит следующим образом:Использование длины подстроки для определения того, как сплайсировать возвращаемое не-число

var num; 
    var numberCount = -1; 
    var nameCount = 5; 
    socket.on('Balls', function(msg) 
    { 
     console.log("Minus: "+parseInt(msg.Name.Length) - nameCount); 
     if(msg.Name.length == nameCount) 
     { 
      num = parseInt(msg.Name.slice(numberCount)); 
     } 
     if(msg.Name.Length > nameCount) 
     { 
      console.log("Minus: "+msg.Name.Length - nameCount); 
      numberCount- (msg.Name.Length - nameCount); 
      nameCount+ (msg.Name.Length - nameCount); 
      num = parseInt(msg.Name.slice(numberCount)); 
     } 

Начальная, если заявление будет смотреть на ГЗС и отрезает соответствующую информацию. Второе, если заявление будет проверять, если длина увеличилась т.е. «doop9» стал «doop10» или ушла в 100-х

numberCount- (msg.Name.Length - nameCount); 

увеличит количество отсечь Строка

nameCount+ (msg.Name.Length - nameCount); 

будет ли увеличить количество имен, так что будет в первом случае оператор

num = parseInt(msg.Name.slice(numberCount)); 

получает этот экземпляр. Есть ли причина, по которой возникает ошибка NaN?

+0

Можете ли вы привести пример того, что 'object' выглядит? По умолчанию свойство length в Strings не заглавное, поэтому, если вы не создали свое собственное свойство, это может быть проблемой. –

+0

Почему бы просто не использовать регулярное выражение для получения номера? 'doop10'.replace (/ [^ 0-9.]/g, ''); // 10 ' – shennan

+0

Я ошибался, я использовал капитал :( –

ответ

0

Порядок проведения операций. Вы добавляете число в строку и пытаетесь вычесть число из строки.

Ваш код это:

console.log(("Minus: " + parseInt(msg.Name.Length)) - nameCount); 

Когда вам это нужно

console.log("Minus: " + (parseInt(msg.Name.Length)) - nameCount)); 

Существуют также другие проблемы с вашим кодом с делать addtions/вычитания, но не сохраняет значение.

1

Одна из ваших проблем заключается в том, что вы вызываете numberCount- (msg.Name.Length - nameCount);, что ничего не собирается делать, потому что оно не изменяет на месте. Вместо этого попробуйте добавить = после этого. Кроме того, вы пытаетесь вычесть integer из string:

console.log(("Minus: " + parseInt(msg.Name.Length)) - nameCount); 

Который пытается взять (к примеру) "Minus: 4", и вычесть из него 3: "Minus: 4" - 3, что приведет к NaN ошибки.

Исправлен код:

var num; 
var numberCount = -1; 
var nameCount = 5; 
socket.on('Balls', function(msg) 
{ 
    console.log("Minus: "+(parseInt(msg.Name.Length) - nameCount)); 
    if(msg.Name.length == nameCount) 
    { 
     num = parseInt(msg.Name.slice(numberCount)); 
    } 
    if(msg.Name.Length > nameCount) 
    { 
     console.log("Minus: "+(msg.Name.Length - nameCount)); 
     numberCount-=(msg.Name.Length - nameCount); 
     nameCount+=(msg.Name.Length - nameCount); 
     num = parseInt(msg.Name.slice(numberCount)); 
    }