类型错误:对象没有拆分方法

时间:2016-10-29 01:58:03

标签: javascript typeerror

我一直在对代码变量进行练习,但是我的代码通过了测试,但它给出了一个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

     抛出前                             ^

1 个答案:

答案 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(" ");
};