Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.06.2019, 12:04
Аватар для NeonMan
Кандидат Javascript-наук
Отправить личное сообщение для NeonMan Посмотреть профиль Найти все сообщения от NeonMan
 
Регистрация: 22.07.2018
Сообщений: 123

50% массива (условие)
Подскажите такой момент.
У меня есть массив
items [
  {
  blue: false,
  red: false
  },
  {
  blue: false,
  red: false
  },
  {
  blue: false,
  red: false
  },
  {
  blue: false,
  red: false
  },
  {
  blue: false,
  red: false
  }
]


у меня есть функция, которая берет из массива рандомный объект и меняет при условии либо в синий либо в красный одно из значений в true, функция с интервалом, повторяется

Подскажите как прописать
if (если red: true у 50% объектов массива items) {
    return;
}
Ответить с цитированием
  #2 (permalink)  
Старый 07.06.2019, 12:36
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

var items = [
  {
  blue: false,
  red: true
  },
  {
  blue: false,
  red: false
  },
  {
  blue: false,
  red: true
  },
  {
  blue: false,
  red: false
  },
  {
  blue: false,
  red: true
  }
];

var result = 100 * items.filter(item => item.red).length / items.length;

alert(result + "%");
Ответить с цитированием
  #3 (permalink)  
Старый 07.06.2019, 13:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

массив половина красных
NeonMan,
let items = [{
        blue: false,
        red: false
    },
    {
        blue: false,
        red: false
    },
    {
        blue: false,
        red: true
    },
    {
        blue: false,
        red: true
    },
    {
        blue: false,
        red: true
    }
]
const halfRed = arr => {
    let { length } = arr;
    let i = length / 2;
    i = Math.ceil(i);
    for (; --length;) {
        i -= arr[length].red;
        if (!i) return true;
        if (i > length) return false;
    }
    return false
}
console.log(halfRed(items))
Ответить с цитированием
  #4 (permalink)  
Старый 07.06.2019, 14:03
Аватар для NeonMan
Кандидат Javascript-наук
Отправить личное сообщение для NeonMan Посмотреть профиль Найти все сообщения от NeonMan
 
Регистрация: 22.07.2018
Сообщений: 123

Сообщение от Dilettante_Pro Посмотреть сообщение
var result = 100 * items.filter(item => item.red).length / items.length;

const halfRed = arr => {
    let { length } = arr;
    let i = length / 2;
    i = Math.ceil(i);
    for (; --length;) {
        i -= arr[length].red;
        if (!i) return true;
        if (i > length) return false;
    }
    return false
}
Спасибо, помогло. Сделал таким образом)

const itemsLength = getState().buttons.length;
	const countItems = getState().buttons
	 .filter(item => item.blue === true).length / itemsLength * 100
	    if (countItems > 50) {
		return
	     }
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите , элементы массива по порядку из другого массива Rost_shat Javascript под браузер 9 28.07.2018 20:03
Соединение массива Artur_Hopf Общие вопросы Javascript 4 07.06.2018 16:48
Обход многомерного массива с задержкой после каждого цикла Walk Общие вопросы Javascript 2 14.08.2017 16:17
Передать элементы php массива в js переменную zav Элементы интерфейса 3 22.11.2016 14:35
Ввод диапазона значений массива с клавиатуры Воскобоенко Общие вопросы Javascript 11 06.06.2015 22:34