Сортируйте массив снизу вверх и наоборот. Получить только 10% от общего массива - PullRequest
0 голосов
/ 11 ноября 2018

"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 голосов
/ 11 ноября 2018

Когда вы сортируете, вам не нужно это a.missed_votes_pct - b.missed_votes_pct, ожидайте, что missed_votes_pct будет ключом внутри объекта. В этом случае массив будет выглядеть так

[{missed_votes_pct:someVal},{missed_votes_pct:someVal}]

Только сортировка missed_votes_pct, которая является просто массивом, будет в порядке. Вы можете использовать Math.ceil или Math.floor, чтобы получить круглую цифру, потому что длина массива 10% также может давать плавающее число.

Вы можете использовать splice для создания подмассива.

Технически, вам не нужны две функции, чтобы получить верхнюю и нижнюю 10%. Вы можете отсортировать в порядке возрастания и использовать array.splice(start,howmany), чтобы получить верхнюю 10 и array.splice(-10), чтобы получить последние 10, наибольшую

let 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 = Math.ceil(array.length * 0.1);
  return array.splice(0, 10);

}


function bottomTenPercent(members) {
  let memsortedMems = members.sort(function(a, b) {
    return a - b;
  });

  return getTenPerOfMissed(memsortedMems)
}


function TopTenPercent(members) {
  let memsortedMems = members.sort(function(a, b) {
    return b - a;
  });
  return getTenPerOfMissed(memsortedMems);
}


console.log(bottomTenPercent(missed_votes_pct));
console.log(TopTenPercent(missed_votes_pct));
0 голосов
/ 11 ноября 2018

Самый простой способ открыть этот временный массив - это вернуть его из функции 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...