2012-10-30 67 views
0

我試圖將PHP中的LZW解壓縮器從JSend轉換爲javascript,並且我得到了一個我無法理解的函數。解決JSend中LZW解壓縮php函數的問題

private static function decompressLZW($aCodes) 
    { 
    $sData = ''; 
    $oDictionary = range("\x0000", "\xff"); 
    foreach ($aCodes as $sKey => $iCode) 
    { 
     $sElement = $oDictionary[$iCode]; 
     if (!isset($sElement)) 
      $sElement = $sWord . $sWord[0]; 
     $sData .= $sElement; 
     if ($sKey) 
      $oDictionary[] = $sWord . $sElement[0]; 
     $sWord = $sElement; 
    } 
    return $sData; 
    } 

這是我在JavaScript中,到目前爲止,但我當我在JavaScript運行它,它抱怨說sWord沒有定義,並且在看PHP函數,我看不出這並未」會產生一個錯誤?

下面是我在javscript至今:

function decompressLZW(aCodes) { 
    var sData = ''; 
    var oDictionary = []; 

    for (var i = 0; i < 256; i++) { 
    oDictionary[String.fromCharCode(i)] = i; 
    } 

    for(var i=0, iLn = aCodes.length; i < iLn; i++) { 
    var sElement = oDictionary[aCodes[i]]; 

    if(!sElement) { 
     sElement = sWord + sWord[0]; 
    } 

    //some magic needs to happen here 
    } 

    return sData; 
} 

回答

1

那麼它有種不好的IMO,但.... $sWord基本上是$sElement這是附近的迭代結束時確定。他們指望前兩個if語句只有在循環的至少一次運行之後才成立,在這種情況下,$sWord將與前一次迭代的$sElement相同。

林不知道這一假設的意義,但如果是我,我仍然測試的$sWord存在,並拋出一個異常,如果它真的發生(即使在理論上應不會發生吧)......

所以你需要弄清楚爲什麼sElement = oDictionary[aCodes[i]];不是評估真相。它可能與測試angiest undefined(更像是在做isset())一樣簡單,而不是進行鬆散的錯誤檢查。

if(sElement === undefined) { 
    sElement = sWord + sWord[0]; 
}