Подсчет элементов в массиве свыше определенного значения

У меня есть два массива, [a,b] и [c,d,e,f,g,h]. Возможные значения в массивах: 0, 1, 2 и 3.

Переменная устанавливается на основе значений в этих массивах, удовлетворяющих определенным условиям:

  • n = 3: все в первом массиве =3, по крайней мере 2 значения во втором массиве =3, нет значений ни в одном массиве =0
  • n = 2: все в первом массиве >=2, не менее 4 значений во втором массиве >=2, ни в одном массиве нет значений =0
  • n = 1: все в первом массиве >=1, не менее 4 значений во втором массиве >=1
  • n = 0: что-нибудь еще

Есть ли менее подробный способ написать это, чем иметь большое количество циклов count for, которые все выполняются с немного разными условиями?

Вы можете отсортировать массивы, а затем найти последний индекс значения, который соответствует вашим условиям.

Charlie Bamford 10.12.2020 18:42

у вас есть реальные примеры?

Nina Scholz 10.12.2020 18:43

Покажите, что у вас есть, и мы будем рады улучшить это.

PeterKA 10.12.2020 18:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете сделать следующее без большого количества циклов for,

let a = [2,2,2,2];
let b = [2,2,2,2,3,1];

let countA = {0: 0, 1: 0, 2: 0, 3: 0};
let countB = {0: 0, 1: 0, 2: 0, 3: 0};

a.forEach(item => {
  countA[item]++;
}) 

b.forEach(item => {
  countB[item]++;
}) 

let n = 0;
if (countA[3] === a.length && countB[3] >= 2 && countB[0] === 0 && countA[0] === 0) {
  n = 3;
} else if (countA[3] + countA[2] === a.length && countB[2] + countB[3] >= 4 && countB[0] === 0 && countA[0] === 0) {
  n = 2;
} else if (countA[1] + countA[2] + countA[3] === a.length && countB[1] + countB[2] + countB[3] >= 4 && countB[0] === 0 && countA[0] === 0) {
  n = 1;
}

console.info(n);

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

Dave 10.12.2020 19:05

Вы можете использовать методы массива Array#every() и Array#filter() следующим образом:

let a = [2,3];
let b = [2,2,2,2,3,0];
let c = [1,0];
let d = [2,3,0,0,1,1];
let e = [3,3];
let f = [3,3,3,2,2,2];

console.info( von(a,b) );
console.info( von(c,d) );
console.info( von(e,f) );


function von(a, b) {
    return [3,2,1,0]
    .filter(
        v => a.every(x => x>=v) && 
        b.filter(y => y>=v).length >= (v===3?2:4) &&
        b.filter(y => y===0).length <= ([3,2].includes(v)?0:3)
    )
    [0];
}

Другие вопросы по теме