一个关于JS数组通过手动排序问题的解决方案

作者: 2011/12/11 12:56:09

问题实例: 

var arr = new Array(5)
arr[0] = "Jani"
arr[1] = "Hege"
arr[2] = "Stale"
arr[3] = "Kai Jim"
arr[4] = "Borge"

document.write(arr + "<br />")
arr.splice(2,2)
document.write(arr + "<br />")
这段代码的输出结果是:
Jani,Hege,Stale,Kai Jim,Borge
Jani,Hege,Borge

同样是数组的splice()方法,下面这段代码结果却不一样
var Num_1=[];
var Num_2=[];
var num;

for(var i=1;i<50;i++){
Num_1.push(i<10?"0"+i:i);
}
for(var i=0;i<5;i++){
num=Num_1.splice(Math.floor(Math.random()*Num_1.length),1);
Num_2.push(num);
}
document.write("随机产生的号码:"+Num_2.sort());

splice(x,y)方法是从索引的x开始删除y个元素
但是num=Num_1.splice(Math.floor(Math.random()*Num_1.length),1);
这个应该是删除一个元素 还有49个元素
可是问什么num就是一个数

求解为什么
还有sort()方法是数组排序,我声明一个数组添加5个数据型元素,然后用sort()方法却不能排序,需要设置个参数
<script type="text/javascript">

var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"

document.write(arr + "<br />")
document.write(arr.sort())

</script>
这个结果是
10,5,40,25,1000,1
1,10,1000,25,40,5
没有排序


<script type="text/javascript">

function sortNumber(a,b)
{
return a - b
}

var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"

document.write(arr + "<br />")
document.write(arr.sort(sortNumber))

</script>
需要在设置个方法才能排序

而最上面个的那段程序直接用sort()就能排序,没有参数,为什么 求解?

解决方案:

1. splice是直接操作原数组的,并且返回的不是原数组,而是移除的元素组成的数组。所以你splice(n, 1)返回的当然是只有一个元素的数组。
// [0,1,2].splice(1,1) : [1]

2. sort是可以不用传递比较函数的,它会直接使用默认的比较。你的第二段代码中排序是成功的,1,10,1000,25,40,5,你没发现它们起始数字是递增的吗?因为你push进去的是字符串,它是以字符串比较来排序的("b">"a", "b"<"ba")。同理,第一段代码你觉得是按数字排序,实际还是按字符串排序的,不信你去掉1位数的"0"前缀

特别推荐

玩家留言 跟帖评论
查看更多评论