Javascript 为什么可以';我不能使用.split()?
我肯定我不知道传递的是什么类型的变量。我的印象是,当我调用函数permutation('abc')时,我正在向函数传递一个字符串。但是当我尝试使用这个方法时,split会给我一个错误,split不是一个函数。所以我用Array.prototype.slice.call(str)解决了这个问题,但问题仍然是为什么.split不是一个选项。我的代码如下:Javascript 为什么可以';我不能使用.split()?,javascript,arrays,string,arguments,Javascript,Arrays,String,Arguments,我肯定我不知道传递的是什么类型的变量。我的印象是,当我调用函数permutation('abc')时,我正在向函数传递一个字符串。但是当我尝试使用这个方法时,split会给我一个错误,split不是一个函数。所以我用Array.prototype.slice.call(str)解决了这个问题,但问题仍然是为什么.split不是一个选项。我的代码如下: function permutation(str, n) { array = Array.prototype.slice.call(str);
function permutation(str, n) {
array = Array.prototype.slice.call(str); // why not array = str.split('');
n = n || array.length;
if (n == 1) {
console.log(array.join(''));
return array.join('');
} else {
for (var i=0; i<n;i++) {
permutation(array, n-1);
if (n%2 == 0) {
swap(array,i,n-1);
}
else {
swap(array,0,n-1);
}
}
}
}
function swap(array, i, j) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
return array;
}
permutation('abc');
函数置换(str,n){
array=array.prototype.slice.call(str);//为什么不array=str.split(“”);
n=n | | array.length;
如果(n==1){
console.log(array.join(“”));
返回数组。join(“”);
}否则{
对于(var i=0;i因为这行在:
置换(数组,n-1)中)
,您的递归调用传递的是现在的数组。对排列的第一次调用是字符串,所有递归调用都将传递数组,因为它。在第二次迭代时出错。第一次迭代,str
是字符串,但在随后的调用中,您传递了带有排列的数组(数组,n-1)
您将希望传递array.join(“”)
取而代之,它应该可以工作。不过,我不完全清楚为什么要首先转换为数组?索引访问和字符交换都可以作为字符串来完成。@mhodges如果你用slice插入一个数字数组,它会给你正确的排列。如果使用split,它会出错。@Matt我的观点是OP应该不必拆分为数组。您可以将值保留为字符串并检查长度,执行字符索引/交换。字符串和数组之间的来回转换是不必要的复杂性,这是OP问题的根本原因。因为这行代码:排列(数组,n-1)
,您的递归调用传递的是现在的数组。对排列的第一次调用是字符串,所有递归调用都将传递数组,因为它。在第二次迭代时出错。第一次迭代,str
是字符串,但在随后的调用中,您传递了带有排列的数组(数组,n-1)
您将希望传递array.join(“”)
取而代之,它应该可以工作。不过,我不完全清楚为什么要首先转换为数组?索引访问和字符交换都可以作为字符串来完成。@mhodges如果你用slice插入一个数字数组,它会给你正确的排列。如果使用split,它会出错。@Matt我的观点是OP应该不必拆分为数组。您可以将值保留为字符串并检查长度,执行字符索引/交换。在字符串和数组之间来回转换是不必要的复杂性,这是OP问题的根本原因。