2017-01-31 25 views
0

プログラムは2つのテキストファイルから入力を受け取ります。最初のペアはデータペアを保持し、各ペアはそれ自身のテキスト行にあります。第1の部分は単語であり、第2の部分は重みを表す数字である。 2番目のファイルは、それぞれ独自の行にある単語のリストです。私は入力ストリームをテストして、ファイルが各配列に入力されていることを知っています。私が文字列の組み合わせを比較するために行くとき、言葉はそれらが想定されるときに等しいと比較されません。私は彼らが基本的な文字列であり、オブジェクトではないことを確認しました。私は==、===、localeCompare()を成功させようとしました。私は文字列をトリムし、valueOf()およびtoString()を使用しても動作しません。どんな助けもありがとう。文字列のJavaScript配列が比較されない

<!-- File: Enter filename --> 
 
<!DOCTYPE html> 
 

 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <title>Mod D 3: Revenge of the JS</title> 
 
</head> 
 

 
<body> 
 
    <input onchange="loadFile(id)" type="file" name="fileName" id="firstFile" accept=".txt"> 
 
    <br> 
 
    <input onchange="loadFile(id)" type="file" name="fileName2" id="secondFile" accept=".txt"> 
 
    <br> 
 
    <br> 
 
    <button onclick="compareFiles()">compare files</button> 
 
    <br> 
 
    <br> 
 

 
    <textarea readonly name="textStuff" id="textStuff" cols="30" rows="15" style="resize none;" data-role="none"></textarea> 
 
    <script> 
 
    var display = document.getElementById("textStuff"); 
 
    var file1Words = []; 
 
    var file1Weight = []; 
 
    var file2Words = []; 
 
    var words = []; 
 
    var testingFiles = false; 
 

 
    function loadFile(idname) { 
 
     console.log("arrived at load function"); 
 
     var file = document.getElementById(idname).files[0]; 
 
     var reader = new FileReader(); 
 
     reader.onload = function(progressEvent) { 
 
     var lineNum = this.result.split('\n'); 
 
     if (idname == 'firstFile') { 
 
      console.log("found the first file"); 
 
      for (var i = 0; i < lineNum.length; i++) { 
 
      var holder = lineNum[i].split(" "); 
 
      console.log("loading..."); 
 
      file1Words.push(holder[0]); 
 
      file1Weight.push(Number(holder[1])); 
 
      } 
 
     } else if (idname == 'secondFile') { 
 
      console.log("found second file"); 
 
      for (var i = 0; i < lineNum.length; i++) { 
 
      console.log("loading..."); 
 
      file2Words.push(lineNum[i]); 
 
      } 
 
     } 
 
     }; 
 
     reader.readAsText(file); 
 
    }; 
 

 
    function compareFiles() { 
 
     console.log("in the compare function"); 
 
     if (file1Words.length == 0 || file2Words.length == 0) { 
 
     console.log("why no stuff"); 
 
     alert("You must input both files"); 
 
     return; 
 
     } 
 
     if (testingFiles) { 
 
     console.log("testing the files"); 
 
     display.value = ""; 
 
     for (var i = 0; i < file1Words.length; i++) { 
 
      display.value += file1Words[i] + " " + file1Weight[i] + '\n'; 
 
     } 
 
     for (var i = 0; i < file2Words.length; i++) { 
 
      display.value += file2Words[i]; 
 
     } 
 
     } 
 

 
     // loop through the arrays 
 
     for (var i = 0; i < file1Words.length; i++) { 
 
     var s1 = file1Words[i]; 
 
     for (var j = 0; j < file2Words.length; j++) { 
 
      //console.log(file1Words[i] + " " + file2Words[j]); 
 
      var s2 = file2Words[j]; 
 
      console.log(s1 + " " + s2); 
 
      console.log(s1.localeCompare(s2)); 
 
      if (s1.localeCompare(s2) == 0) { 
 
      console.log("found something. sending to next func"); 
 
      } 
 
     } 
 
     } 
 

 
    }; 
 

 
    function compareToSaved() { 
 
     console.log("found a match. comparing to see if top 15"); 
 
    }; 
 
    </script> 
 

 
</body> 
 

 
</html>

答えて

0

あなたは配列にそれらをプッシュする前に、各LINEコンテンツに対してtrim()を行う必要があります。 file2Wordsリスト - 第二ワードで

var holder = lineNum[i].trim().split(" "); 
file2Words.push(lineNum[i].trim()); 

var display = document.getElementById("textStuff"); 
 
var file1Words = []; 
 
var file1Weight = []; 
 
var file2Words = []; 
 
var words = []; 
 
var testingFiles = false; 
 

 
function loadFile(idname) { 
 
\t console.log("arrived at load function"); 
 
\t var file = document.getElementById(idname).files[0]; 
 
\t var reader = new FileReader(); 
 
\t 
 
\t reader.onload = function (progressEvent) { 
 
\t \t var lines = this.result.split('\n'); 
 
\t \t 
 
\t \t if (idname == 'firstFile') { 
 
\t \t \t console.log("found the first file"); 
 
\t \t \t 
 
\t \t \t lines.forEach(line => { 
 
\t \t \t \t var values = line.trim().split(" "); 
 
\t \t \t \t file1Words.push(values[0]); 
 
\t \t \t \t file1Weight.push(Number(values[1])); 
 
\t \t \t }); 
 
\t \t } else if (idname == 'secondFile') { 
 
\t \t \t 
 
\t \t \t console.log("found second file"); 
 
\t \t \t lines.forEach(line => { 
 
\t \t \t \t file2Words.push(line.trim()); 
 
\t \t \t }); 
 
\t \t } 
 
\t }; 
 
\t 
 
\t reader.readAsText(file); 
 
}; 
 

 
function compareFiles() { 
 
\t console.log("in the compare function"); 
 
\t console.log(file1Words, file2Words); 
 

 
\t if (file1Words.length == 0 || file2Words.length == 0) { 
 
\t \t 
 
\t \t console.log("why no stuff"); 
 
\t \t alert("You must input both files"); 
 
\t \t return; 
 
\t } 
 
\t if (testingFiles) { 
 
\t 
 
\t \t console.log("testing the files"); 
 
\t \t display.value = ""; 
 
\t \t file1Words.forEach((element, index) => { 
 
\t \t \t display.value += element + " " + file1Weight[index] + '\n'; 
 
\t \t }); 
 
\t \t 
 
\t \t file2Words.forEach((element, index) => { 
 
\t \t \t display.value += element + '\n'; 
 
\t \t }); 
 
\t } 
 

 
\t // loop through the arrays 
 
\t for (var i = 0; i < file1Words.length; i++) { 
 
\t \t var s1 = file1Words[i]; 
 
\t \t for (var j = 0; j < file2Words.length; j++) { 
 
\t \t \t var s2 = file2Words[j]; 
 
\t \t \t var result = s1 === s2; 
 
\t \t \t console.log(s1 + " ==? " + s2, result); 
 
\t \t \t if (result) { 
 
\t \t \t \t console.log("found something. sending to next func"); 
 
\t \t \t } 
 
\t \t } 
 
\t } 
 

 
}; 
 

 
function compareToSaved() { 
 
\t console.log("found a match. comparing to see if top 15"); 
 
};
<!-- File: Enter filename --> 
 
<!DOCTYPE html> 
 

 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <title>Mod D 3: Revenge of the JS</title> 
 
</head> 
 

 
<body> 
 
    <input onchange="loadFile(id)" type="file" name="fileName" id="firstFile" accept=".txt"> 
 
    <br> 
 
    <input onchange="loadFile(id)" type="file" name="fileName2" id="secondFile" accept=".txt"> 
 
    <br> 
 
    <br> 
 
    <button onclick="compareFiles()">compare files</button> 
 
    <br> 
 
    <br> 
 

 
    <textarea readonly name="textStuff" id="textStuff" cols="30" rows="15" style="resize none;" data-role="none"></textarea> 
 

 
</body> 
 

 
</html>

1

、 キャリッジリターンはまた、最後に追加されます。

したがって、2番目のfile2Wordsには常にfile1Wordsよりも1文字多くの文字が含まれています。

これは、2つの配列から文字列の長さを表示することで確認できます。 次のとおりです。これに対処するため

また、これは13としてfile2Wordsの最後の文字のASCIIコードを印刷する(キャリッジリターン)

for (var i = 0; i < file1Words.length; i++) { 
     var s1 = file1Words[i]; 
     for (var j = 0; j < file2Words.length; j++) { 
      //console.log(file1Words[i] + " " + file2Words[j]); 
      var s2 = file2Words[j]; 

      console.log(","+s1 + "," + s2 + ","); 
      console.log(s1.length) 
      console.log(s2.length) 
     console.log(s2.charCodeAt(s2.length-1)) 

      console.log(s1.localeCompare(s2)); 
      if (s1.localeCompare(s2) == 0) { 
      console.log("found something. sending to next func"); 
      } 
     } 
     } 

    }; 

、使用は、他の回答で述べたようにリストに単語を追加する前に()をトリム。