我必须创建一个需要3个数字的函数。该函数应返回一个包含从最小到最大的数字的数组。到目前为止,我有这个。我知道它不正确,但它是一个开始。我也没有使用本机功能。谁能给我一些提示?感谢任何帮助。
function leastToGreatest (num) {
var array = [];
var num1 = 0;
var num2 = 0;
var num3 = 0;
for (var i = 0; i < num.length; i++) {
if(num[i] < num[i] && num[i] < num[i]) {
num[i] = num1;
array.push(num1);
}
else if(num[i] > num[i] && num[i] < num[i]) {
num[i] = num2;
array.push(num2);
}
else if(num[i] > num[i] && num[i] > num[i])
num[i] = num3;
array.push(num3);
}
return array;
}
leastToGreatest(2,1,3);
答案 0 :(得分:1)
我建议使用两个for
循环来解决这个问题。例如,
function sortArray(array) {
var temp = 0;
for (var i = 0; i < array.length; i++) {
for (var j = i; j < array.length; j++) {
if (array[j] < array[i]) {
temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
return array;
}
console.log(sortArray([3,1,2]));
使用此函数,无论数组的大小如何,它总是会对它进行排序。
您的功能不起作用的原因(如@WashingtonGuedes所述)是您每次都在比较相同的值。如他们所说,您将到达最后一个语句并收到两个false
,这会导致您对所有三个false
语句测试if
。然后,您返回的数组将为空。
一个建议是不像你所做的那样对三个值进行硬编码,而是假设什么都没有让程序付出艰苦的努力。正如我的代码片段中所示,您可以输入任意长度的数组,它将被排序,而不仅仅是长度为3的位置。
答案 1 :(得分:0)
您现在的代码现在无法正常工作,因为您正在将数字与自身进行比较,因此它始终相等(导致您的排序无效)。要获得有效的排序,您可以解决此问题或使用array.prototype.sort。
答案 2 :(得分:0)
这是一个有趣的小变化:
var sortingFunction = function(){
console.log([].slice.apply(arguments).sort(function(a, b) { return a - b; }));
}
sortingFunction(3,2,5,1);
&#13;
您可以传入任意数量的数字,而不仅仅是三个。如果要将其限制为3,可以在函数中对其进行测试:
var sortingFunction = function(){
var values = [].slice.apply(arguments);
if(values.length === 3) {
console.log(values.sort(function(a, b) { return a - b; }));
}
else
{
console.log('you didn\'t pass in three values');
}
}
sortingFunction(3,2,5,1);
sortingFunction(3,31,1);
&#13;
答案 3 :(得分:0)
如果您只想要一个数字从最小到最大排列的数组,可以使用sort()方法和以下参数:
array.sort(function(a,b){return(a-b)});
var array = [12,7,18,1];
array.sort(function(a,b){return (a-b)});
console.log(array); //Array should be arranged from least to greatest
&#13;
答案 4 :(得分:0)
如果您想要排序的只有三个项目,您可以通过三次比较和交换轻松完成:
if (num[0] > num[1])
{
// swap num[0] and num[1]
temp = num[0]; num[0] = num[1]; num[1] = temp;
}
if (num[0] > num[2])
{
// swap num[0] and num[2]
temp = num[0]; num[0] = num[2]; num[2] = temp;
}
// at this point, num[0] contains the smallest of the three numbers
if (num[1] > num[2])
{
// swap num[1] and num[2]
temp = num[1]; num[1] = num[2]; num[1] = temp;
}
// your three items are sorted
这很容易用手证明是正确的。在小纸片上写下数字1,2和3,按随机顺序排列,然后执行上述步骤。无论你从哪个顺序开始,这都会对这三个项目进行排序。
明白,以上只适用于三个项目。如果你想要一种方法来排序任意数量的项目,那么你将需要使用内置的排序方法。
答案 5 :(得分:0)
var sort = function ([x, y, z]) {
var k = [x, y, z];
k[0] = Math.min(x, y, z);
if ((x < y && x > z) || (x < z && x > y)) {
k[1] = x;
}
else if ((y < x && y > z) || (y < z && y > x)) {
k[1] = y;
}
else {
k[1] = z;
}
k[2] = Math.max(x, y, z);
return k;
};