我需要你帮助一个js。 我有一个文本框,我已经写了一个脚本来检测每个文本框中有多少个字母(例如,单词"你好"有1H - 1E - 2L -1O)
$(function () {
var text = $('#testWords').text();
var hCount = text.split('h').length - 1;
var eCount = text.split('e').length - 1;
var lCount = text.split('l').length - 1;
var oCount = text.split('o').length - 1;
$('#output').html(
'words count:
</br>H - ' + lCount +
'</br>E - ' + oCount +
'</br>L - ' + vCount +
'</br>O - ' + vCount});
因此我从字母数中获得了数字1120。 我需要的是以这种方式对字母求和:
(1 + 1) - (1 + 2) - (2 + 0)
(H + E) - (E + L) - (L + O)
我知道我可以使用js语法添加一个简单的和,但问题是我需要保持总和,直到我只保留两个数字,例如,如果我在这里有这个数字代码:
126876
总和将是
1 + 2 - 2 + 6 - 6 + 8 - 8 + 7 - 7 + 6
3 - 8 - 14 - 15 - 13(结果)
所以接下来的总和是
3 + 8 - 8 + 1 - 4 + 1 - 5 + 1 3
将双数分成单个,依此类推,直到所有和结果只是0到99之间的数字
我希望我能以一种简单的方式解释我的问题,而且有人可以帮我解决这个问题。
而且,如果有人为我所做的代码提出建议或改进,请告诉我。
非常感谢 欢呼声
也许为了简单起见,我需要将88这样的数字分成8和8,然后将最后一个与第一个相加,依此类推
答案 0 :(得分:1)
首先,您的代码中有一些我不理解的内容:您如何从1120
进入hello
?永远不应该有0,如果我理解你的逻辑,那应该是1121。
话虽如此,我确实试了一下,这就是我想出的: http://jsfiddle.net/75fyZ/3/
正如您将注意到我对您的代码进行了一些优化(分裂的东西真的很难看,而且会产生错误的结果)。完整的代码(包括一些助手和接口逻辑)是小提琴,但主要的逻辑在这里:
function calculateMagicNumber(text) {
// count the chars - return s something like {'h':1,'l':2,'o':1}
var charCounts = countCharOccurances(text);
// replace each char by its count
var digits = '';
for (var l = 0; l < text.length; l++) {
digits += charCounts[text[l]];
}
// do the magic sum, until only 2 digits left
var i = 1;
while (digits.length > 2) {
digits = sumAdjecentDigits(digits);
// prevent an infinte loop
i++;
if (i > 20) return false;
}
return text;
}
如果你开始玩它,你会注意到数字可以很快开始增长。一些样本:
这就是我添加'无限循环'保护的原因。即使有100个周期的警卫,我的浏览器也崩溃了......
还有一个问题,对你而言。除了是一个有趣的实验,为什么你需要这样的算法?
我希望你喜欢我想出的结果。随意询问是否有任何不清楚,或者我是否误解了任何规格。