2017-03-06 117 views
0

爲這個愚蠢的問題道歉。我正試圖在Codewars上解決這個Kata,https://www.codewars.com/kata/the-enigma-machine-part-1-the-plugboard/train/javascript/。它基本上是一個Enigma機器的開始。我覺得我在這方面做了一些很好的進步。現在我通過pythontutor.com運行它,但是我不知道爲什麼當我運行這個時,for循環的第二次迭代將插件板的屬性「A」更改爲「C」,並且不是創建一個值爲'A'的新屬性'C'。我確信這是一個簡單的概念,我完全錯過了,但我肯定會對此有所瞭解。Javascript Object Key Value Confusion

class Plugboard { 

constructor(wires) { 

if(wires.length % 2 !== 0 || wires.length === 0 || wires.length > 20){ 
    throw 'Error' 
} 
    console.log(wires) 
    this.str = wires.split('') 

for(var i = 0; i < this.str.length; i += 2){ 
    if(this.hasOwnProperty(this.str[i])){ 
    throw 'Duplicate'; 
    } 
    this[this.str[i+1]] = this.str[i]; 
    this[this.str[i]] = this.str[i+1]; 

    } 
} 

process(chr){ 
    if(!this.hasOwnProperty(chr)){ 
     return chr 
    } else { 
     return this[chr]; 
     } 
    } 

} 
var plugboard = new Plugboard("ABCA"); 
+0

當我運行該代碼時,我得到''B「:」A「,」A「:」C「,」C「:」A「這是不正確的還是我錯過了什麼? – JohanP

+0

引用你得到的實際輸出和你期望得到的輸出會好得多。 –

+0

再次,對不起!期望的輸出是「B」:「A」; 「A」:「B」; 「C」:「A」; 「A」:「C」;. 我希望實現的是爲每對字符創建兩個鍵值對。例如,如果input =('XY'),預期的輸出this.X ='Y'; this.y ='X'。我知道有一些基本的東西我必須做錯。 –

回答

0

C屬性確實存在並且值爲「A」。我跑它repl.it,它只是作品...

class Plugboard { 
 

 
constructor(wires) { 
 

 
if(wires.length % 2 !== 0 || wires.length === 0 || wires.length > 20){ 
 
    throw 'Error' 
 
} 
 
    console.log(wires) 
 
    this.str = wires.split('') 
 

 
for(var i = 0; i < this.str.length; i += 2){ 
 
    if(this.hasOwnProperty(this.str[i])){ 
 
    throw 'Duplicate'; 
 
    } 
 
    this[this.str[i+1]] = this.str[i]; 
 
    this[this.str[i]] = this.str[i+1]; 
 
    } 
 
} 
 

 
process(chr){ 
 
    if(!this.hasOwnProperty(chr)){ 
 
     return chr 
 
    } else { 
 
     return this[chr]; 
 
     } 
 
    } 
 

 
} 
 
var plugboard = new Plugboard("ABCA"); 
 
console.log(plugboard); 
 
console.log("Value of C:",plugboard.C); 
 
console.log("Value of A:",plugboard.A); 
 
console.log("Value of B:",plugboard.B);

repl.it鏈接:https://repl.it/GJg7/2

0

我猜你可能會得到措辭錯誤的這個問題,並且實際上擔心A財產包含C值,而不是相反。

在第一循環中,我們作如下分配:

this["B"] = "A" 
this["A"] = "B" 

在第二循環中,我們作如下分配:

this["A"] = "C" 
this["C"] = "A" 

注意,這覆蓋this["A"]現有的值。它不會被檢測爲重複項,因爲我們只檢查並且不檢查this.str[i+1]是否重複。它不會添加重複的屬性,因爲我們不能擁有重複的屬性。它完全按照它的要求去做。

如果這不是所需的行爲,那麼期望的行爲是什麼?

0

謝謝大家的意見。我意識到自己的錯誤,我在第二次傳球時凌駕了C球。問題解決了,感謝和抱歉,我的無知

相關問題