Как посчитать количество элементов в массиве ниже / выше заданного числа (javascript)

1

Это пример массива, который содержит только числа:

var array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9]

РЕДАКТИРОВАНИЕ

Как подсчитать, сколько (отредактированных из слова "сумма") элементов находится в массиве ниже/выше данного числа, например. "5,25"?

Таким образом, ответ должен быть 5 элементов ниже (3.1, 1, 2.2, 5.1, 2.1) и 3 элемента выше (6, 7.3, 9)

  • 0
    почему бы не использовать третье лицо, как lodash .... будет легко
  • 2
    @RohitasBehera «Легко» - это не цель, а обучение.
Показать ещё 4 комментария
Теги:
arrays
counting
numbers

4 ответа

4
Лучший ответ

Используйте Array # reduce с объектом { above: 0, below: 0 } качестве начального значения. На каждой итерации проверяйте каждый номер на носитель и, соответственно, добавляйте 1 к выше/ниже.

Примечание. Это массив строк. Я преобразовал их вручную в числа. Я также предполагаю, что число, равное медианной, должно быть добавлено ниже. Если вы хотите пропустить эти цифры, измените сравнение на <.

var array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9];

var median = 5.25;

var counts = array.reduce(function(s, n) {
  s[n <= median ? 'below' : 'above'] += 1;
  
  return s;
}, { above: 0, below: 0 });

console.log(counts);

Если у вас должен быть массив строк, вы можете преобразовать его в число во время выполнения, используя String # parseFloat или оператор +:

var array = ['3.1', '1', '2.2', '5.1', '6', '7.3', '2.1', '9'];

var median = 5.25;

var counts = array.reduce(function(s, str) {
  s[+str <= median ? 'below' : 'above'] += 1;
  
  return s;
}, { above: 0, below: 0 });

console.log(counts);
  • 0
    как вы преобразовали массив строк в массив чисел ??
  • 0
    Строки @RohitasBehera здесь не были основным случаем
Показать ещё 3 комментария
2

Нет необходимости в сокращении, потому что результат не изменяется с помощью сокращения, это все еще объект.

var array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9],
    value = 5.25,
    counts = { below: 0, equal: 0, above: 0 };

array.forEach(function(v) {
    counts[{ '-1': 'below', 0: 'equal', 1: 'above' }[Math.sign(v - value)]]++;
});

console.log(counts);
  • 0
    Спасибо, что работает :)
0

Есть несколько стратегий, но я буду использовать тот, который легко читать и понимать:

(1) Создайте новый массив со всеми элементами, которые соответствуют критериям aka <= 5.25

let sampleArr = ['3.1', '1', '2.2', '5.1', '6', '7.3', '2.1', '9'];

let sortedArr = sampleArr.filter(function(e){
     return parseInt(e) <= 5.25
});

Заметьте, что я написал parseInt (e), который преобразует строку в число. Значения, которые вы дали в вашем массиве, были строками.

(2) Теперь просто получим длину sortedArr следующим образом:

let finalCount = sortedArr.length;

Надеюсь это поможет!

  • 0
    Я задал вопрос неправильно (сейчас редактируется). Я имею в виду «сколько элементов ниже / выше заданного числа». Но ответ мне помог :) Мне просто нужно использовать .filter и посчитать длину sortedArr . Спасибо
  • 0
    Всегда рада помочь! Не могли бы вы выбрать мой ответ в качестве ответа на вопрос. Спасибо :)
0

Предполагая, что вы используете массив чисел.

Я использую lodash... это помогает сократить код &

var array = [3.1, 1, 2.2, 5.1, 6, 7.3, 2.1, 9];


console.log(_.sum(array));   //  _.sum  does the addition
<script src="https://cdn.jsdelivr.net/lodash/4.14.1/lodash.min.js"></script>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню