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
试图做的只是解析它得到的第一个整数,在本例中是a1
。正如另一个人告诉你的,你的解决方案看起来非常复杂,你应该改变它,但是如果你对这个解决方案非常满意(你不应该),你可以改变:
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);