【问题标题】:How to find duplicates of three variables that reference an array?如何找到引用数组的三个变量的重复项?
【发布时间】:2015-07-29 21:57:52
【问题描述】:

我有一个函数,它读取一个 txt 文件,然后从它读取的每一行的 charAt() 值的组合中创建三个变量。变量是 k、k1 和 k2。这些变量引用了一个很长的数组文件myarray[k][k1][k2],然后将这些数组元素的值写入div

每次创建 k、k1 和 k2 值时,我可能会阅读多达 400 行文本。我将如何确定这些相同的 k、k1 和 k2 值是否重复?"

更新 - 我尝试使用

if ( !(myArray[k] && myArray[k][k1] && myArray[k][k1][k2]))

但它不起作用,可能是因为我没有正确解释我的问题。

例如,读完第 15 行后,我得到了 k=0, k1=3, k2=10 的值,这些值将用于 myArray[k][k1][k2]

这些相同的值,即k=0, k1=3, k2=10 可能不会再次出现,或者它们可能在读取后出现,比如第 222 行,如果是这种情况,我想写一些不同的东西,即我不想输出值myArray[0][3][10] 再次。 我希望这是有道理的。

我认为最好包含代码:

    <script src="AllTransit.js"></script>


<script>

var myplanets = 
["SUN    ", "MOON   ", "MERCURY", "VENUS  ", "MARS   ", "JUPITER", "SATURN ", "URANUS ", "NEPTUNE",     "PLUTO  "]

var myplanets1 = 
["SUN    ", "MOON   ", "MERCURY", "VENUS  ", "MARS   ", "JUPITER", "SATURN ", "URANUS   ", "NEPTUNE",   "PLUTO  ", "MC     ", "ASC    "]

var myaspects = ["conjunct", "sextile ", "square  ", "trine   ", "opposite"]

var numval =  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
var numval1 = [0, 1, 2, 3, 4]
var numval2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

var r, tplanet, aspect, nplanet, range, k, k1, k2



function loadFile(){

  var ForReading = 1, ForWriting = 2, ForAppending = 8;
  var fso = new ActiveXObject("Scripting.FileSystemObject");

  var filename = "emmy_test1.txt"
  var info = document.getElementById("info");
  var transits = document.getElementById("transits");

  f = fso.OpenTextFile(filename, ForReading);


  while (!f.AtEndOfStream){
    r = f.ReadLine();

    tplanet  =  r.charAt(2) + r.charAt(3) + r.charAt(4) + r.charAt(5) + r.charAt(6) + r.charAt(7) + r.charAt    (8)

    for (var j = 0; j < myplanets.length; j++) {
      if (tplanet==myplanets[j]) {k = numval[j]}
    }

    aspect = r.charAt(34) + r.charAt(35) + r.charAt(36) + r.charAt(37) + r.charAt(38) + r.charAt(39) +  r.charAt(40) + r.charAt(41)

    for (var j = 0; j < myaspects.length; j++) {
      if (aspect==myaspects[j]) {k1 = numval1[j]}
    }

    nplanet = r.charAt(45) + r.charAt(46) + r.charAt(47) + r.charAt(48) + r.charAt(49) + r.charAt(50) +     r.charAt(51)

    for (var j = 0; j < myplanets1.length; j++) {
      if (nplanet==myplanets1[j]) {k2 = numval2[j]}
    }

    range = r.charAt(66) + r.charAt(67) + r.charAt(68) + r.charAt(69) + r.charAt(70) + r.charAt(71) +   r.charAt(72) +  r.charAt(73) + r.charAt(74) + r.charAt(75) + r.charAt(76) + r.charAt(77) + r.charAt(78) + r.charAt(79) + r.charAt(80)   + r.charAt(81) + r.charAt(82) + r.charAt(83) + r.charAt(84) + r.charAt(85)

    transits.innerHTML += "<b>" + range + "</b><br>" + myArray[k][k1][k2] + "<br>"
    transits.innerHTML += "<br>"

  }

}

</script>

TIA

【问题讨论】:

  • 只检查myArray[k][k1][k2]是否已经被赋值?
  • 投入使用if ( !(myArray[k] &amp;&amp; myArray[k][k1] &amp;&amp; myArray[k][k1][k2]))。这将评估所有三个。如果它们没有全部设置,这将返回 true。
  • 您是否考虑过r.substr 而不是r.charAt concats?

标签: javascript arrays file


【解决方案1】:

没有属性的未定义变量存在问题,即

var myArray;
if(myArray[1]) ... // error
myArray = [];
if(myArray[1]) ... // ok

所以这应该有效:

var myArray = [];

function add(k,k1,k2) {
  if(myArray[k]===undefined) myArray[k] = [];
  if(myArray[k][k1]===undefined) myArray[k][k1] = [];
  if(myArray[k][k1][k2]===undefined) {
    myArray[k][k1][k2] = true; // or anything but undefined
    transits.innerHTML+= k+","+k1+","+k2+"<br>";  
  }
  else {
    // duplicate
  }
}

【讨论】:

  • Jan - 这对我不起作用 - 所以我添加了我的代码。
  • 啊,我明白了 - 我改写了我的答案以适合您的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 2021-06-21
  • 1970-01-01
相关资源
最近更新 更多