2016-10-29 56 views
0

我一直在codewars上進行練習,但是我的代碼通過了測試,但是它給出了一個typeError。無法弄清楚爲什麼。如果我能得到一些幫助,那會很棒......謝謝!類型錯誤:對象沒有拆分方法

該任務是創建一個函數,可以採取任何字符串,並隨機混雜每個單詞中的字母,同時留下單詞的第一個和最後一個字母。

這裏是我的代碼:

function shuffle(a) { 
    var j, x, i; 
    for (i = a.length; i; i--) { 
     j = Math.floor(Math.random() * i); 
     x = a[i - 1]; 
     a[i - 1] = a[j]; 
     a[j] = x; 
    } 
}; 

mixwords = function(string){ 

    var array = string.split(" "); 

    for (var i = 0; i < array.length; i++) { 
    var itemArray = array[i].split(""); 
    if (itemArray.length > 2) { 
     var first = itemArray.shift(); 
     var last = itemArray.pop(); 

     shuffle(itemArray); 
     itemArray.unshift(first); 
     itemArray.push(last); 
     var newItem = itemArray.join(""); 
     array[i] = newItem; 
    } 
    }; 
    console.log(array.join(" ")); 
    return array.join(" "); 
}; 

錯誤信息是這樣的:

TypeError: Object 23 has no method 'split' at mixwords

/runner/frameworks/javascript/cw-2.js:273

throw ex; ^

+0

我們怎麼知道?我甚至沒有看到你打電話什麼。 – PHPglue

+0

你假設某些類型爲'String',它具有'.split'方法,但是某些類型是'Number'。哪一條是23號線? –

+0

PHPglue,對不起,我最後沒有調用函數的原因是因爲代碼應該通過一些測試。只爲你:mixwords(「冬天即將來臨」); – yangmei

回答

0

你基本上需要清理任何被傳遞到函數作爲string參數,在情況下,它的Number類型。

mixwords = function(string){ 
    string = typeof string !== 'string' ? string.toString() : string; 
    var array = string.split(" "); 

    for (var i = 0; i < array.length; i++) { 
    var itemArray = array[i].split(""); 
    if (itemArray.length > 2) { 
     var first = itemArray.shift(); 
     var last = itemArray.pop(); 

     shuffle(itemArray); 
     itemArray.unshift(first); 
     itemArray.push(last); 
     var newItem = itemArray.join(""); 
     array[i] = newItem; 
    } 
    }; 
    console.log(array.join(" ")); 
    return array.join(" "); 
}; 

另外,如果你需要簡單地立即返回,如果參數不是string,這將是解決辦法:

mixwords = function(string){ 
    if (typeof string !== 'string') return; // just 'return' to return 'undefined' 

    var array = string.split(" "); 

    for (var i = 0; i < array.length; i++) { 
    var itemArray = array[i].split(""); 
    if (itemArray.length > 2) { 
     var first = itemArray.shift(); 
     var last = itemArray.pop(); 

     shuffle(itemArray); 
     itemArray.unshift(first); 
     itemArray.push(last); 
     var newItem = itemArray.join(""); 
     array[i] = newItem; 
    } 
    }; 
    console.log(array.join(" ")); 
    return array.join(" "); 
}; 
+0

感謝amdouglas,但是非常有幫助,它沒有通過一次測試,錯誤信息是:✘預期:未定義,取而代之:'23'。這裏有一些測試:Test.assertEquals(mixwords(23),undefined); Test.assertEquals(mixwords(true),undefined); 它看起來像我需要返回undefined如果變量字符串不是一個字符串? – yangmei

+0

因此,不是轉換爲字符串,而是需要檢查字符串是否爲「string」類型,如果不是,則返回。像這樣:'if(typeof string!=='string'){return; }' – amdouglas

+0

太棒了!通過所有測試沒有錯誤。謝謝! – yangmei

相關問題