Javascript 求数组(平均值,百分比,中位数,众数)

吐血整理,望能帮到有需要的猿

1.平均值

思路:遍历数组求和 / 数组长度

    // 平均值
    let arr = {'a' : 0}
    let tmpJson = {a: [59907, 59907, 59907, 59651, 64515, 64515, 64771]}
    tmpJson.a.forEach((item,index)=>{
      arr['a'] += item;
      if(index+1 == tmpJson.a.length) {
    	  arr['a'] /= index + 1
      }
    })
    console.log(arr);

2.百分比

还需优化,大佬提出建议

    // 百分比
    var data = [1, 3, 7, 9, 22];
    计算数组所占百分比
    function countPercentage(countArray) {
      var j = eval(countArray.join('+'));
      console.log(j);

      var resultArray = [];
      for (var i = 0; i < countArray.length; i++) {
        var k = Math.ceil((countArray[i] / j) * 100) + "%";
        resultArray.push(k);
      }
      return resultArray;
    }
    var resultData = countPercentage(data);
    console.log(resultData);

3.中位数

// 中位数 长度2n  取n  
function median(arr) {
      var concat = arr;
      concat = concat.sort(
        function (a, b) {
          return a - b
        });
      // console.log(concat);
      var length = concat.length;
      if (length % 2 == 1) {
        // 如果长度是奇数
        console.log("奇数-中位数为: " + (concat[(length / 2) - 0.5]))
        return concat[(length / 2) - 0.5]
      } else {
        // 如果长度是偶数
        console.log("偶数-中位数为: " + concat[(length / 2) - 1]);
        return concat[(length / 2) - 1] 
         // 如果不为2n取n 则为  arr[(arr.length)/2] +arr[((arr.length)/2)+1]/ 2。
      }
    }

    arr = [8199,8000,7500,8192,8198,9000,8710]
    median(arr);

4.众数

    // 众数
    //数组出现最多的元素(众数)和次数
    function modes(arr) {
      // 将数组向下取整
      let newArr = arr.map(item => {
        return Math.floor(item / 100) * 100
      })
      newArr.sort((a, b) => {
        return a - b
      })


      // 处理对象为最多众数以及个数
      var obj = {};
      newArr.forEach((item, i) => {
        var key = newArr[i];
        if (obj[key]) {
          obj[key]++;
        } else {
          obj[key] = 1;
        }
      })

      console.log('obj',obj);
      // 找出最多的众数(可能多个)
      var Count = Math.max(...Object.values(obj));
      var modeArr = [];
      for (var key in obj) {
        if (Count <= obj[key]) {
          Count = obj[key];
          modeArr.push(key)
        }
      }
      console.log(modeArr);
      // 找出最多众数(多个处理为众数的中位数)
      if(modeArr.length == 1) {
        return modeArr[0]
      }else {
        return median(modeArr) //median函数为取中位数函数 见3
      }
    }

你可能感兴趣的:(js,js数学运算,javascript,开发语言,ecmascript)