2017-08-02 70 views
-2

如何從此文本值(123)中刪除此paranthesis()並將其設置爲整數,因爲我想在代碼中重複使用此代碼如何優化此對於數學計算 我試着用下面的代碼,但它不工作 ()的目的是-ve我需要將它替換爲-123和-321,然後做計算calc會喜歡(-321 + 123)= -198和-198再次(198)如何從此文本值(123)中刪除此pamentalhesis()

var num1 = "(123)"; 
 
var num2 = "(321)"; 
 
value = checkIntegerValue(num1, num2); 
 

 
function checkIntegerValue(num1, num2) { 
 
    num1 = num1.replace(/\(|\)/g, ''); 
 
    num2 = num2.replace(/\(|\)/g, ''); 
 
    if (parseInt(num1) && parseInt(num2)) { 
 
    return parseInt(num2 - num1); 
 
    } 
 
}

+0

** [Works fine](https://jsfiddle.net/Guruprasad_Rao/a3npncu3/)** ..有什麼問題? –

+0

這工作得很好。 –

+0

只需添加'console.log(value);',你就可以看到它在工作。 –

回答

-2
function checkIntegerValue(num){ 
     return +num.replace(/\(|\)/g,''); 
} 

應該工作

+1

這不會是你的,因爲你改變了原有的函數邏輯。 – Justinas

+0

你是對的,我忘了減去。 – locomain

-2

,您可以嘗試

var mystring = '(12345)'; 
 

 
var mystring= mystring.replace(/"/g, "").replace(/'/g, "").replace(/\(|\)/g, ""); 
 

 
console.log(mystring); 
 

 

 
var num1 = "(123)"; 
 
\t var num2 = "(321)"; 
 
\t var sum_value = checkIntegerValue(num1, num2); 
 
\t console.log(sum_value); 
 

 
\t function checkIntegerValue(num1, num2) { 
 
\t num1 = num1.replace(/"/g, "").replace(/'/g, "").replace(/\(|\)/g, ""); 
 
\t num2 = num2.replace(/"/g, "").replace(/'/g, "").replace(/\(|\)/g, ""); 
 
\t if (parseInt(num1) && parseInt(num2)) { 
 
\t  return parseInt(parseInt(num2) - parseInt(num1)); 
 
\t } 
 
\t }

+0

'mystring.replace(/「/ g,」「).replace(/'/ g,」「).replace(/ \(| \)/ g,」「);'和mystring.replace /「|'| \(| \)/ g,」「);' – Justinas

+0

誰downvote?給我理由爲什麼? –

-1

優化你的代碼:

  1. 移動replaceparseInt失去作用
  2. 重從回報parseInt()移動

var num1 = parseInt("(123)".replace(/\(|\)/g, '')); 
 
var num2 = parseInt("(321)".replace(/\(|\)/g, '')); 
 
value = checkIntegerValue(num1, num2); 
 

 
function checkIntegerValue(num1, num2) { 
 
    if (num1 && num2) { 
 
    return num2 - num1; 
 
    } 
 
}

+0

*「將替換和parseInt移出功能」*爲什麼?是什麼讓重複比不重複它更好? –

+0

*(不是我的DV)* ... –

+0

@ T.J.Crowder因爲他多次使用相同的值,所以最好將重複的邏輯移出功能。功能命名也表示元素必須是整數。 – Justinas

0

,僅能拍攝numbers.So除了你應該刪除別人的正則表達式/[^\d]+/g燒焦。 \d僅指示數字並且^否定。所以整個正則表達式定義如果不是數字,則用空值替換它。例如''

var num1 = "(123)"; 
 
    var num2 = "(321)"; 
 
    value = checkIntegerValue(num1,num2); 
 
    console.log(value); 
 

 
    function checkIntegerValue(num1,num2){ 
 
      num1 = num1.replace(/[^\d]+/g, ''); 
 
      num2 = num2.replace(/[^\d]+/g, ''); 
 
      if(parseInt(num1) && parseInt(num2)){ 
 
      return parseInt(num2-num1); 
 
      } 
 
    }

0

您已成功取出了(),但有幾個問題:

  • 將返回undefined如果任一數字0,因爲0falsy,並且您的if條件正在檢查parseInt retu對任何一個數字都是一個虛假的值。
  • 您正在將字符串中的數字反覆轉換爲數字:一旦使用(parseInt(num1)),並且第二次通過-運算符隱式轉換。 parseInt和隱式轉換的規則是不同的。最好是有意做一次。
  • 你對結果使用pareseInt,這沒有意義,因爲結果是已經是的一個數字。 (如果你想刪除一個數的小數部分,不要使用parseInt,使用Math.floorMath.round,或Math.ceil。)
  • parseInt可能會或可能不適合你,確保你有一個數字的最佳方式,因爲它停在第一個無效字符上。例如,parseInt("123abc")123。其他選項是NumberparseFloat,它們都允許浮點運算。 Number的規則與隱式轉換的規則相同。 parseFloat,如parseInt,停在第一個無效字符處。但Number和隱式轉換對待""作爲0。所以選擇你的毒藥。 :-)
  • 而不是檢查falsy值,請使用isNaN來查看從字符串到數字的轉換是否失敗。
  • 你的函數正在做很多事情:它將數字轉換爲整數,驗證它們,然後返回減去它們的結果。理想情況下,一個功能應該有一個單一的工作。
  • 如果()意味着數字是負數,那麼您需要知道是否刪除它們並否定結果。

看評論(我也用一個函數將結果與()格式時該值爲負):

test("(123)", "(321)"); 
 
test("123", "(321)"); 
 
test("123", "321"); 
 

 
function test(str1, str2) { 
 
    console.log(str2 + " - " + str1 + " = " + formatNumber(checkIntegerValue(str1, str2))); 
 
} 
 

 
function convertInt(str) { 
 
    // Trim the string 
 
    str = str.trim(); 
 
    // Flag up if negative 
 
    var sign = str[0] === "(" ? -1 : 1; 
 
    // Remove() 
 
    str = str.replace(/\(|\)/g, ''); 
 
    // If the string is blank, return NaN 
 
    if (!str.length) { 
 
    return NaN; 
 
    } 
 
    // Otherwise, parse as number 
 
    var num = Number(str); 
 
    // If it's not an integer, return NaN 
 
    if (Math.floor(num) != num) { 
 
    return NaN; 
 
    } 
 
    // Apply sign and return 
 
    return num * sign; 
 
} 
 

 
// I'd give this a name more accurately describing what it does 
 
function checkIntegerValue(str1, str2) { 
 
    var num1 = convertInt(str1); 
 
    var num2 = convertInt(str2); 
 
    if (isNaN(num1) || isNaN(num2)) { 
 
    return undefined; 
 
    } 
 
    return num2 - num1; 
 
} 
 

 
function formatNumber(num) { 
 
    return num < 0 ? "(" + (-num) + ")" : String(num); 
 
}

+0

*如果它不是一個整數,返回NaN *你是否做過這個來檢查傳遞的字符串是否是一個浮點數,它的無效?如果是,我不認爲這是有意的。 – Rajesh

+0

@Rajesh:OP的代碼非常關於整數值,這就是爲什麼在那裏。當然,如果他們想允許帶有小數值的數字,他們可以將其刪除(並更改各種名稱)。 –

-2

我得到了答案

var num1 = "(123)"; 
var num2 = "(321)"; 
checkIntegerValue(num1, num2) 

function checkIntegerValue(num1, num2) { 
    if(!parseInt(num1) && num1!=""){ 
     num1 = "-"+num1.replace(/\(|\)/g, ''); 
    } 
    if(!parseInt(num2) && num2 !=""){ 
     num2 = '-'+num2.replace(/\(|\)/g, ''); 
    } 

    if (parseInt(num1) && parseInt(num2)) { 
     return num2 - num1; 
    }else{ 
     return 0; 
    } 
} 
+1

您正在過度使用'parseInt'。另外爲什麼'''。num1.replace'? – Justinas

+0

使(123)到-123是的我使用parseInt,因爲輸入類型不是數字,所以只有 –

+0

我可以知道這個代碼有什麼問題 –