【问题标题】:Basic JavaScript Sort Above Mean and Below基本 JavaScript 排序高于平均值和低于平均值
【发布时间】:2014-04-28 22:21:48
【问题描述】:

我正在尝试编写一个 JavaScript 代码,该代码将接受用户输入并找到平均值。然后它应该把高于平均值的数字放在一个列表中,把数字放在平均值下面。除了对低于和高于平均值的数字进行排序外,一切正常。比你的帮助。

function getNums()
{
    var nums = new Array();
    var numAmt = prompt("How many data values do you have?");
    numAmt = parseInt(numAmt);
    var i = 0;
    for (i = 0; i<= numAmt - 1; i++)
    {
        nums[i]= prompt("Enter the data value number " + (i + 1));
    }

    var sum = 0;
    for(i = 0; i < nums.length; i++)
    {
        sum += parseInt(nums[i]); 
        var avg = sum/nums.length;
    }       

    var big = 0;
    var small = 0;
    for (i = 0; i < nums.length; i++) 
    {  
        if (nums[i] > avg)
            big += parseInt(numbers[i]);  
        else
            small += parseInt(numbers[i]);  

        document.getElementById('numbers').innerHTML = "Your data: " + nums;
        document.getElementById('average').innerHTML =("The mean(average) of these numbers is: "  + avg.toFixed(2) +".<br>");
        document.getElementById('bigger').innerHTML = "Your data: " + big;
        document.getElementById('smaller').innerHTML = "Your data: " + small;
    } 
}

【问题讨论】:

  • 为什么我总是看到人们在做new Array()
  • 阅读课本中的第 3 章...
  • 你好像在做number + number = number
  • 你计算 avg 的方式似乎不对,因为你在循环中计算它只是为了在下一次迭代中丢弃它。将其移出循环;不是为了程序的正确性(它会给出完全相同的结果),而是为了代码整洁。

标签: javascript arrays average


【解决方案1】:

我个人会将其分解为两个函数,一个专注于“找到这个数组的平均值”,另一个专注于“围绕一个轴对这个数组进行排序”。

function mean(arr) {
  var sum = arr.reduce(function (prev, curr) {
    return prev + curr;
  });
  return sum / arr.length;
}

function pivotSort(arr, pivot) {
  var sorted = [];
  arr.forEach(function (val) {
    if (val >= pivot)
      sorted.push(val);
    else 
      sorted.unshift(val);
  });
}

枢轴排序甚至还没有接近优化,但见鬼,现在 v8 相当快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-18
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多