我在使用JavaScript方面遇到了一些麻烦。当我在' LINE 2'中调用函数compare时在它下面改变了to_sort [i]的值,但没有改变枢轴。在' LINE 1'打印的值不同于' LINE 3'。这是为什么?
我认为这可能与pivot和to_sort [i]通过引用传递有关,但显然原始类型是通过JavaScript中的值传递的。
帮助表示感谢。
function compare(str1, str2){
for (i = 0;i < Math.min(str1.length,str2.length); ++i){
if(str2[i] < str1[i]){
return false;
}
}
if(str1.length != str2.length && str2.length < str1.length){
return false;
}
return true;
}
function quicksort(to_sort){
if(to_sort.length < 2) return to_sort;
var pivot = to_sort[0];
var less_pivot = [];
var more_pivot = [];
for(i = 1; i < to_sort.length; ++i){
console.log(to_sort[i]);// LINE 1
if(compare(to_sort[i], pivot)){//LINE 2
console.log(to_sort[i]); //LINE 3
less_pivot = less_pivot.concat(to_sort[i]);
}
else{
more_pivot = more_pivot.concat(to_sort[i]);
}
}
return [].concat(quicksort(less_pivot, compare_function), pivot, quicksort(more_pivot, compare_function));
}
quicksort(["2.0.1", "2.0.0"]);
output:
2.0.0
undefined
答案 0 :(得分:6)
看起来好像是因为compare
函数更改了迭代索引i
的值:
for (i = 0; i < Math.min(str1.length, str2.length); ++i) {
if (str2[i] < str1[i]) {
return false;
}
}
因为您声明i
没有var
关键字。请记住,将未声明的变量赋值为全局变量。