2015-06-11 38 views
0

我已經爲此工作了4個小時,並閱讀了許多相關的解釋並嘗試了其中的幾個。我確信我錯過了一個簡單的概念並修復了這個錯誤。非常感謝您的幫助。TypeError:baseChoiceList.splice不是函數

ColorChart.setupAnswerChoices();

"setupAnswerChoices": function() { 

    var currentChoiceList = sessionStorage.getItem("NE_CURRENT_CHOICE_LIST"); 
    var baseChoiceList = currentChoiceList.slice(); 

    console.log ("baseChoiceList " + baseChoiceList); 

baseChoiceList 12,17,1,22,27,NCN

consol.log ("currentChoiceList " + currentChoiceList); 

currentChoiceList 12,17,1,22,27,NCN

var what = Object.prototype.toString; 
    console.log("buttonChoice " + what.call(buttonChoice)); 

buttonChoice [object Array]

console.log("baseChoiceList " + what.call(baseChoiceList)); 

baseChoiceList [object String]

var buttonChoice = []; 

for (var i = 0; i < 5; i++) { 
    var randomButtonIndex = Math.floor(Math.random() * (5 - i)); 
    buttonChoice = baseChoiceList.splice(randomButtonIndex,1); 
} 

Uncaught TypeError: baseChoiceList.splice is not a function

+0

Norman Breau是正確的。建議使用JSON.stringify和JSON.parse替代方法。然而,Norman使用.split的解決方案正是這種情況下所需的輕量級直接解決方案。 – Rich

回答

0

sessionStorage(和localStorage)都只能將鍵/值對存儲爲字符串。

所以,你的代碼:

var currentChoiceList = sessionStorage.getItem("NE_CURRENT_CHOICE_LIST"); 
var baseChoiceList = currentChoiceList.slice(); 

currentChoiceList不是一個數組。它是一個字符串。 baseChoiceList又是一個字符串,它是currentChoiceList的副本。 (字符串也有一個slice()方法。)

看起來你真的想這樣做:

var currentChoiceList = sessionStorage.getItem("NE_CURRENT_CHOICE_LIST"); 
var baseChoiceList = currentChoiceList.split(','); 

字符串split方法接受一個分隔符,將字符串分割成字符串數組。