如何从此文本值(123)中删除此pamentalhesis()

问题描述:

如何从此文本值(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);',你就可以看到它在工作。 –

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

应该工作

+1

这不会是你的,因为你改变了原有的函数逻辑。 – Justinas

+0

你是对的,我忘了减去。 – locomain

,您可以尝试

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. 移动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

,仅能拍摄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); 
 
      } 
 
    }

您已成功取出了(),但有几个问题:

  • 将返回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的代码非常关于整数值,这就是为什么在那里。当然,如果他们想允许带有小数值的数字,他们可以将其删除(并更改各种名称)。 –

我得到了答案

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

我可以知道这个代码有什么问题 –