我一直在对代码变量进行练习,但是我的代码通过了测试,但它给出了一个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:对象23在mixwords
中没有方法'split'/runner/frameworks/javascript/cw-2.js:273
抛出前 ^
答案 0 :(得分: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(" ");
};