【发布时间】:2017-04-03 20:58:02
【问题描述】:
我想知道我是否可以像这样对这个数组进行排序:
[ 0 ,3, 1, 4, 0 ] => [ 1, 3, 4, 0, 0]
详细规则:
- 数组包含 0 和正数。
- 最后都是0。
- 所有正数按升序排列。
一开始,我使用了js的原始排序功能,比如:
[0, 3, 1, 4, 0].sort(function(previous_value, former_value){
if(previous_value == 0 && former_value != 0 ) {
return 1;
}else if (former_value == 0 && former_value != 0) {
return -1;
}else if (former_value == 0 && former_value == 0) {
return 0;
}else{
return previous_value - former_value;
}
})
但是,我失败了。我想知道是否可以使用sort 函数实现“我的排序算法”?例如:
[0, 3, 1, 4, 0].sort(function(previous_value, former_value){
//code goes here
})
它会得到正确答案:
[1, 3, 4, 0, 0]
【问题讨论】:
-
你需要它只使用排序功能,还是我可以用其他方式实现它?
-
我刚刚测试了您的功能,似乎按预期工作:jsfiddle.net/mrlew/j5qbcgch
-
您的代码 sn-p 令人困惑且不正确。这些变量被命名为“previous”和“former”(几乎是同义词,令人困惑),并且您只检查了两个
else if分支中的“前”一个,您应该同时使用这两个分支。 -
@user4815162342 是的!你说的对! “以前的”和“以前的”看起来不太好。我只是不想将它们命名为“a”、“b”或“x/y”。我去看看!
-
传统名称是有原因的——你不能为这些元素分配含义(因为排序算法给了你完全任意的数组成员),所以名称传达了这一点。从某种意义上说,它们实际上只是一些你需要比较的 a/b/x/y,仅此而已。
标签: javascript arrays algorithm sorting