Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串更改为数字并对数字求和_Javascript_Regex - Fatal编程技术网

Javascript 将字符串更改为数字并对数字求和

Javascript 将字符串更改为数字并对数字求和,javascript,regex,Javascript,Regex,以下是我所拥有的: //我的全局 var输出=$(“#输出”); 函数m_o(){ //var输入=$(“#输入”); //var value=input.val(); var value=“分数”; //背景 变量r_o={ //设置#自定义 A:“1”, B:“2”, C:“3”, D:“4”, E:“5”, F:“6”, G:“7”, H:“8”, I:“9”, J:“10”, K:“11”, L:“12”, M:“13”, N:“14”, O:“15”, P:“16”, 问题:“17”

以下是我所拥有的:

//我的全局
var输出=$(“#输出”);
函数m_o(){
//var输入=$(“#输入”);
//var value=input.val();
var value=“分数”;
//背景
变量r_o={
//设置#自定义
A:“1”,
B:“2”,
C:“3”,
D:“4”,
E:“5”,
F:“6”,
G:“7”,
H:“8”,
I:“9”,
J:“10”,
K:“11”,
L:“12”,
M:“13”,
N:“14”,
O:“15”,
P:“16”,
问题:“17”,
R:“18”,
S:“19”,
T:“20”,
U:“21”,
五:“22”,
W:“23”,
X:“24”,
Y:“25”,
Z:“26”,
};
//翻译
var re=new RegExp(Object.keys(r|o.join)(“|”)g);
值=值。替换(re),功能(匹配){
返回r_o[匹配];
});
value=parseInt(value.split(“”).join(“”),10);
输出.val(值);
}

5X脚本

我觉得你把它复杂化了。您可以使用循环遍历字符串中的每个字符

对于每个字母,检查它是否存在于
r\u o
对象中,如果存在,则从对象中获取相应的值并将其添加到总数中

这里有一个例子

 // Translating
  var length = value.length; //how many characters in the string?
  var total = 0;  //what you will return

  for(let i=0; i < value.length; i++) //for each character in the string
  {
     var m = value[i];
     if(r_o.hasOwnProperty(m)) total += r_o[m];
     //if the char is in the obj, add the corresponding value
  }


  output.val(total);  //return the new total
//翻译
变量长度=value.length//字符串中有多少个字符?
var合计=0//你将返回什么
for(设i=0;i
我觉得你把它复杂化了。您可以使用循环遍历字符串中的每个字符

对于每个字母,检查它是否存在于
r\u o
对象中,如果存在,则从对象中获取相应的值并将其添加到总数中

这里有一个例子

 // Translating
  var length = value.length; //how many characters in the string?
  var total = 0;  //what you will return

  for(let i=0; i < value.length; i++) //for each character in the string
  {
     var m = value[i];
     if(r_o.hasOwnProperty(m)) total += r_o[m];
     //if the char is in the obj, add the corresponding value
  }


  output.val(total);  //return the new total
//翻译
变量长度=value.length//字符串中有多少个字符?
var合计=0//你将返回什么
for(设i=0;i
基本上,值
parseInt
“see”是“1+…”并解析为1

查看修改后的代码段,打开控制台日志,看看会发生什么。 借此机会学习如何调试

//我的全局
var输出=$(“#输出”);
函数m_o(){
//var输入=$(“#输入”);
//var value=input.val();
var value=“分数”;
//背景
变量r_o={
//设置#自定义
A:“1”,
B:“2”,
C:“3”,
D:“4”,
E:“5”,
F:“6”,
G:“7”,
H:“8”,
I:“9”,
J:“10”,
K:“11”,
L:“12”,
M:“13”,
N:“14”,
O:“15”,
P:“16”,
问题:“17”,
R:“18”,
S:“19”,
T:“20”,
U:“21”,
五:“22”,
W:“23”,
X:“24”,
Y:“25”,
Z:“26”,
};
//翻译
var re=new RegExp(Object.keys(r|o.join)(“|”)g);
值=值。替换(re),功能(匹配){
控制台日志(匹配);
返回r_o[匹配];
});
console.log(值);
var t=value.split(“”).join(“”);
log('即将“parseInt”:',t);
值=parseInt(t,10);
console.log(值);
输出.val(值);
}

5X脚本

基本上,值
parseInt
“see”是“1+…”并解析为1

查看修改后的代码段,打开控制台日志,看看会发生什么。 借此机会学习如何调试

//我的全局
var输出=$(“#输出”);
函数m_o(){
//var输入=$(“#输入”);
//var value=input.val();
var value=“分数”;
//背景
变量r_o={
//设置#自定义
A:“1”,
B:“2”,
C:“3”,
D:“4”,
E:“5”,
F:“6”,
G:“7”,
H:“8”,
I:“9”,
J:“10”,
K:“11”,
L:“12”,
M:“13”,
N:“14”,
O:“15”,
P:“16”,
问题:“17”,
R:“18”,
S:“19”,
T:“20”,
U:“21”,
五:“22”,
W:“23”,
X:“24”,
Y:“25”,
Z:“26”,
};
//翻译
var re=new RegExp(Object.keys(r|o.join)(“|”)g);
值=值。替换(re),功能(匹配){
控制台日志(匹配);
返回r_o[匹配];
});
console.log(值);
var t=value.split(“”).join(“”);
log('即将“parseInt”:',t);
值=parseInt(t,10);
console.log(值);
输出.val(值);
}

5X脚本

据我所知,parseInt无法像您这样计算表达式。无论如何,我建议使用
String.prototype.charCodeAt
,以使代码更可读,并更改函数和变量名称

编辑:只是为了让答案更清楚:传递给
parseInt
的实际上是一个字符串,它包含一个类似“
1+2+3+4
”的表达式。。。
parseInt
试图做的只是解析它得到的第一个整数,在本例中是a
1
。正如另一个人告诉你的,你的解决方案看起来非常复杂,你应该改变它,但是如果你对这个解决方案非常满意(你不应该),你可以改变:

value = parseInt(value.split("").join(" + "), 10);
与:

实际上,您的代码中还有另一个错误:您正在执行
拆分(“”
)。当您将一个字符替换为2位数字(如19)时,这可能会导致错误(这就是为什么即使使用我的解决方案,您也会得到33而不是60)。您的正则表达式将
S
替换为
19
,但是,当您拆分并加入时,您的2位数字被拆分为1和9。一个简单的解决方案是在替换时添加一个空格,然后使用它分割值,替换:

return r_o[matched];

小解释:现在当你做你的替补时,你是actu
return ' ' + r_o[matched];
eval("value = " + value.split("").join(" + ") + ";");
eval("value = " + value.split(" ").join(" + ") + ";");
value = parseInt(eval(value), 10);
function sumup(s){
    var total= 0, s= s.match(/\+\d+/g) || [];
    while(s.length){
        total+= parseInt(s.shift());
    }
    return total;
}
var charVal = function(c) {return c.charCodeAt(0) - 'A'.charCodeAt(0) + 1;};
var add = function(a, b) {return a + b;};
var convert = function(s) {return s.split('').map(charVal).reduce(add, 0);};

convert('SCORE'); //=> 60
function m_o() {
    var value ="SCORE";
    var finalCount = 0;
    for (var i = 0; i < value.length; i++) {
        finalCount += (value.toUpperCase().charCodeAt(i) - 64);
    }
    $("#output").html(finalCount);
}
var value = "SCORE";

 // Setting
 var r_o = {
 // Setting #customizing
 A:  "1",
 B:  "2",
 C:  "3",
 D:  "4",
 E:  "5",
 F:  "6",
 G:  "7",
 H:  "8",
 I:  "9",
J: "10",
K: "11",
L: "12",
M: "13",
N: "14",
O: "15",
P: "16",
Q: "17",
R: "18",
S: "19",
T: "20",
U: "21",
V: "22",
W: "23",
X: "24",
Y: "25",
Z: "26",
};

// Translating
var re = new RegExp(Object.keys(r_o).join("|"), "g");
var output =0;


 value.replace(re, function (matched) {
        output += parseInt(r_o[matched]);
});

alert(output);