2013-03-24 3 views
1

안녕하세요 저는 길이에 따라 단어를 정렬하고 괜찮다고하는 jquery 기능을 만들었습니다. 하지만 이제 JSON 문자열을 만들기 위해 JSON.stringify를 사용할 수 있도록 객체에 단어를 저장하고 싶습니다. 문제는 모든 단어가 아닌 json 객체로 표시된 마지막 단어 만 가져 오는 것입니다. 나는 그것이 객체에 모든 단어를 추가하거나 추가해야하기 때문에 그것이라고 생각하지만, 나는 어떻게 대답을 찾을 수 없었고 아직 답을 찾지 못했습니다. jquery for 루프를 사용하여 객체에 추가하는 방법은 무엇입니까?

내 기능입니다 :

function sortWords() { 
var count7 = 0; 
var count8 = 0; 
var count9 = 0; 
var count10 = 0; 
var count11 = 0; 
var count12 = 0; 
var obj7 = {}; 
var obj8 = {}; 
var obj9 = {}; 
var obj10 = {}; 
var obj11 = {}; 
var obj12 = {}; 
//Get the text from the div 
var str = $("div.someText").text(); 
//Chance everything exept words into spaces 
str = str.replace(/[^a-zA-Z]/g," "); 
//Replace all spaces for one space 
str = str.replace(/ +/g," "); 
//Make all words lowercase 
str = str.toLowerCase(); 
//Make an array 
var words = str.split(" "); 
//Loop trough the array to show the result 
for(var i=0;i<words.length;i++){ 
    //sort words by length 
    switch(words[i].length) { 
     case 7: 
      count7++; 
      $('td.length7').append("<div>"+count7+": "+words[i]+"</div>"); 
      obj7["word"] = words[i]; 
      break; 
     case 8: 
      count8++; 
      $('td.length8').append("<div>"+count8+": "+words[i]+"</div>"); 
      obj8["word"] = words[i]; 
      break; 
     case 9: 
      count9++; 
      $('td.length9').append("<div>"+count9+": "+words[i]+"</div>"); 
      obj9["word"] = words[i]; 
      break;  
     case 10:  
      count10++; 
      $('td.length10').append("<div>"+count10+": "+words[i]+"</div>"); 
      obj10["word"] = words[i]; 
      break; 
     case 11: 
      count11++; 
      $('td.length11').append("<div>"+count11+": "+words[i]+"</div>"); 
      obj11["word"] = words[i]; 
      break; 
     case 12:  
      count12++; 
      $('td.length12').append("<div>"+count12+": "+words[i]+"</div>"); 
      obj12["word"] = words[i]; 
      break;     
    } 
} 
jsonStr7 = JSON.stringify(obj7); 
$("div.result1").text("The JSON String: " + jsonStr7); 
jsonStr8 = JSON.stringify(obj8); 
$("div.result2").text("The JSON String: " + jsonStr8); 
jsonStr9 = JSON.stringify(obj9); 
$("div.result3").text("The JSON String: " + jsonStr9); 
jsonStr10 = JSON.stringify(obj10); 
$("div.result4").text("The JSON String: " + jsonStr10); 
jsonStr11 = JSON.stringify(obj11); 
$("div.result5").text("The JSON String: " + jsonStr11); 
jsonStr12 = JSON.stringify(obj12); 
$("div.result6").text("The JSON String: " + jsonStr12); 
}; 

html로 : 근대의 뿌리 - Betroot는 위에서 언급 한 @, 당신이 겪고있는 문제가 단일 키 객체를 가지고있다으로

</head> 
<body> 
<input onClick="sortWords()" type="button" value="Sorteren op lengte" /> 
<table border="1" padding="10"> 
<tr> 
    <td>length7</td> 
</tr> 
<tr> 
    <td class="length7"></td> 
</tr> 
</table>  
<table border="1" padding="10"> 
<tr> 
    <td>length8</td> 
</tr> 
<tr> 
    <td class="length8"></td> 
</tr> 
</table>  

<table border="1" padding="10"> 
<tr> 
    <td>length9</td> 
</tr> 
<tr> 
    <td class="length9"></td> 
</tr> 
</table>  

<table border="1" padding="10"> 
<tr> 
    <td>length10</td> 
</tr> 
<tr> 
    <td class="length10"></td> 
</tr> 
</table>  

<table border="1" padding="10"> 
<tr> 
    <td>length11</td> 
</tr> 
<tr> 
    <td class="length11"></td> 
</tr> 
</table>  

<table border="1" padding="10"> 
<tr> 
    <td>length12</td> 
</tr> 
<tr> 
    <td class="length12"></td> 
</tr> 
</table>  

<br /> 
<div class="array"></div> 
<br /> 
<div class="result1"></div> 
<br /> 
<div class="result2"></div> 
<br /> 
<div class="result3"></div> 
<br /> 
<div class="result4"></div> 
<br /> 
<div class="result5"></div> 
<br /> 
<div class="result6"></div> 
<br /> 
<div class="someText"> 
a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa aaaaaaaaaaa aaaaaaaaaaaa 
</div> 
</body> 
</html> 
+0

HTML을 게시 할 수 있습니까? "someText"와 td.lengthX가 포함 된 테이블을 보지 않고도 따르기가 어렵습니다. – ZimSystem

+0

HTML은 결과를 보여주는 일부 div와 테이블입니다. div someText에는 텍스트가 포함되어 있습니다. – Zeebats

+0

변수'count7' 등을 고려해보십시오. 그들은 루프 카운터'i'를 반영하는 것 이상을 수행합니까? 그런 다음 'for' 루프 내에서 obj7 [ "word"] = words [i]; 등의 명령문을 고려하십시오. 이 "단어"속성은 차례대로 각 단어에 설정되므로 루프가 끝나면 단어의 마지막 단어로 설정됩니다. –

답변

2

그 단어에, 그리고 매번 그 열쇠에 대한 값을 최신 일치로 바꿀 때마다. 따라서 항상 마지막 단어 만 저장하게됩니다.

귀하의 의견에 설명 된 구조와 일치 시키려면 개체 배열을 사용해야합니다.

따라서 당신은 개체 대신 배열을 초기화해야합니다 즉 : var obj7 = [];

그때마다 당신은 당신이 그 배열에 객체를 추가해야합니다 워드 길이와 일치. obj7.push({"word":words[i]});

그런 다음 배열 (obj7)을 문자열로 지정할 때 원하는 구조를 얻을 수 있습니다.

관련 문제