从底部到顶部对数组进行排序,然后反向进行排序。仅获得阵列总数的10%

时间:2018-11-11 13:59:01

标签: javascript arrays object

"missed_votes_pct" = [4.61, 0.53, 0.18, 0.89, 0.53, 2.3, 4.96, 
0.71, 0.35, 4.26, 0.35, 1.06, 0.89, 1.06, 
0.18, 0.89, 9.54, 0, 3.9, 4.26, 0.35, 1.77, 
0.35, 0.53, 5.67, 0.35, 1.42, 13.65, 2.66, 
0.18, 0.18, 6.38, 0.71, 8.51, 4, 0.35, 0.35,
 5.14, 0, 0.35, 0.53, 0.35, 4.61, 3.01, 4.43,
 2.13, 1.24, 1.7, 2.13, 10.99, 0.53, 2.09, 
0.53, 0.35, 0, 0.53, 0, 0.35, 3.01, 1.77, 
0.89, 0.53, 45.56, 2.48, 0, 14.89, 1.77, 
4.43, 3.19, 0.35, 2.84, 6.21, 3.55, 1.24, 
0.89, 0.71, 0, 0.89, 1.24, 1.6, 6.21, 2.48,
 1.06, 2.13, 0.18, 0.89, 65, 3.19, 0.89, 0, 
0.89, 3.4, 3.55, 1.06, 0, 3.37, 4.96, 1.06, 0.71,
 1.42]

function getTenPerOfMissed(array) {
  var temp = [];
  var len = array.length * 0.1;
  for (var i = 0; i < array.length; i++) {
    //	console.log(array[i].missed_votes_pct);

    if (i < len) {
      temp.push(array[i]);
    } else if (array[i].missed_votes_pct == array[i - 1].missed_votes_pct) { //find the 10% of the lowest values and keep also values that                                                                               repeated
      temp.push(array[i]);
    } else {
      break;
    }
  }
  console.log(temp);
}


function bottomTenPercent() {
  members.sort(function(a, b) {
    return a.missed_votes_pct - b.missed_votes_pct; //sort our array from lower to higher and call getTenPerOfMissed(members)
    //to keep the 10% of the lowest values
  });
  //	console.log("Lowest" , members)
  getTenPerOfMissed(members)
}


function TopTenPercent() {
  members.sort(function(a, b) {
    return b.missed_votes_pct - a.missed_votes_pct;
  });

  getTenPerOfMissed(members);
}


bottomTenPercent();
TopTenPercent();

我已经创建了这三个函数来对数组从高到低和反向排序。另外,我只需要保留数字的10%,并且我必须保留重复的数字。  当我打印带有排序数字的临时数组时,两个排序函数无法同时使用。如果我打电话,他们中只有一个能完美工作。  我还需要在temp []中访问,因为我想在表格中打印数字。我必须遵循什么过程,因为我根本无法意识到所有过程,并且当我尝试将temp []设置为全局变量时,我的功能无法正常工作 任何想法我在做什么错?因为我在这项任务上坚持了两天。我是javascript语言的新手,如果我的问题很愚蠢,请原谅我

2 个答案:

答案 0 :(得分:1)

打开该临时数组的最简单方法是从getTenPerOfMissed函数返回它。然后,无论调用哪个函数,都可以访问修改后的数组。

function getTenPerOfMissed(array) {
  var temp = [];
  var len = array.length * 0.1;
  for (var i = 0; i < array.length; i++) {
    //  console.log(array[i].missed_votes_pct);

    if (i < len) {
      temp.push(array[i]);
    } else if (array[i].missed_votes_pct == array[i - 1].missed_votes_pct) { //find the 10% of the lowest values and keep also values that                                                                               repeated
      temp.push(array[i]);
    } else {
      break;
    }
  }
  return temp;
}

  var topten = getTenPerOfMissed(array);
  // topten is the "temp" array from getTenPerOfMissed

  // sort array differently
  array.sort(...);
  var bottomten = getTenPerOfMissed(array);

答案 1 :(得分:1)

排序时,不需要此.d.ts,这期望a.missed_votes_pct - b.missed_votes_pct是对象内部的键。在这种情况下,数组看起来像这样

missed_votes_pct

仅对[{missed_votes_pct:someVal},{missed_votes_pct:someVal}] (仅是数组)进行排序就可以了。您可以使用missed_votes_pctMath.ceil来获取舍入数字,因为10%的数组长度也可以给出一个浮点数。

您可以使用Math.floor创建子数组。

从技术上讲,您不需要两个函数来获得前10%和后10%。您可以按升序排序并使用splice获得前10名,array.splice(start,howmany)获得最后10位中的最高

array.splice(-10)