2015-11-18 28 views
0

我正在做一个愚蠢的小编码挑战,让我难住。我试图把键值对的列表,像这样:试图在javascript中总结键值对的列表

约翰:2

简:3

约翰:4

简:5

你的目标是计算textarea中每个键的计数,并在HTML文档中显示每个键的总数。默认值应该导致输出结果为“总计

约翰是6. Jane的总数是8.”

我试图做到这一点没有jQuery或任何其他框架这是我到目前为止,我不断获得NaN的价值。我可能会颠倒我的逻辑?

$(function() { 
var keyStore = document.getElementById("keyValPairs"); 

if (!keyStore){ 
    alert("you suck DIE!!!!!"); 
} 
var hashTable = {}; 

var str = split(","); 
for(var entry in str){ 

    var a = entry.split(":") 
    if(!hashTable.hasOwnProperty(a[0])){ 
     hashTable[a[0]] = 0; 
    } 
    hashTable[a[0]] += parseInt(a[1]); 
} 

console.log(obj); 

}); 

我使用了jQuery函数来包装它,因为我不“T记得说当DOM加载的常规方式

HTML:。

<div class="panel panel-primary"> 
<div class="panel panel-header"> 
    <h1>Sum up your key value pairs</h1> 
</div> 
<div class="panel panel-body"> 
    <div class="col-sm-6"> 
     <textarea class="preescreen-input" name="keyValPairs" id="keyValPairs" cols="30" rows="10"> 
     John : 2, 
     Jane: 3, 
     John : 4, 
     Jane : 5, 
     </textarea> 
    </div> 
    <div class="col-sm-2"> 
     <button class="btn btn-primary">Sum</button> 
    </div> 
    <div class="col-sm-2"> 
     <button class="btn btn-danger"> 
      Insert 
     </button></br></br> 
     <label for="inputBoxKey">Enter Key</label> 
     <input type="text" id="inputBoxKey" name="inputBoxKey"></br></br> 
     <label for="inputBoxVal">Enter Value</label> 
     <input type=" text" id=inputBoxVal name="inputBoxVal"> 
    </div> 
    <div class="col-2-offset-4 panel panel-footer"> 
     <input type="text "> 
    </div> 

    </div> 

</div> 

它只是一个愚蠢的小编程挑战,我在网上找到,但没有更少它让我困惑。任何帮助将不胜感激。任何帮助将不胜感激。

+0

并不意味着太多 – Guyute

回答

1
  1. 你是ca灌装split(",")没有给它一个字符串拆就
  2. 当你做for(var entry in str)entry是关键,而不是在str
  3. 项的值你需要的总和按钮绑定到一个函数来运行代码
  4. 你应该修剪你的字符串删除空白
  5. 你应该确保名称是有效的,如果保释不(对付空行)

这里的这些变化代码:

<div class="panel panel-primary"> 
<div class="panel panel-header"> 
    <h1>Sum up your key value pairs</h1> 
</div> 
<div class="panel panel-body"> 
    <div class="col-sm-6"> 
     <textarea class="preescreen-input" name="keyValPairs" id="keyValPairs" cols="30" rows="10"> 
     John : 2, 
     Jane: 3, 
     John : 4, 
     Jane : 5, 
     </textarea> 
    </div> 
    <div class="col-sm-2"> 
     <button class="btn btn-primary" onclick="sum()">Sum</button> 
    </div> 
    <div class="col-sm-2"> 
     <button class="btn btn-danger"> 
      Insert 
     </button></br></br> 
     <label for="inputBoxKey">Enter Key</label> 
     <input type="text" id="inputBoxKey" name="inputBoxKey"></br></br> 
     <label for="inputBoxVal">Enter Value</label> 
     <input type=" text" id=inputBoxVal name="inputBoxVal"> 
    </div> 
    <div class="col-2-offset-4 panel panel-footer"> 
     <input type="text "> 
    </div> 

    </div> 

</div> 

和JS:

window.sum = function() { 
    var keyStore = document.getElementById("keyValPairs"); 

    if (!keyStore){ 
     alert("you suck DIE!!!!!"); 
    } 
    var hashTable = {}; 

    var str = keyStore.value.split(","); 
    for(var key in str){ 
     var entry = str[key].trim(); 
     var a = entry.split(":"); 
     if(a.length > 0) a[0] = a[0].trim(); 
     if(a.length > 1) a[1] = a[1].trim(); 
     if(a[0] == '') continue; 
     if(!hashTable.hasOwnProperty(a[0])){ 
      hashTable[a[0]]=0; 
     } 
     hashTable[a[0]]+=parseInt(a[1]); 
    } 
    alert(JSON.stringify(hashTable)); 
} 
+0

,帮助谢谢你,我还是我越来越楠在有线的地方看到控制台日志 对象{“约翰”:2,“↵简: 3“:NaN,”John“:4,”Jane“:5,”↵“:NaN} – Guyute

+0

@Guyute看到我编辑的代码,我加了'if(a [0] =='')继续;和更多的修剪呼叫。处理用户输入时,您总是希望进行像这样的安全检查。 – Macmee

+0

这是否表示感谢您的阐述性答案。 – Guyute