Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   50% массива (условие) (https://javascript.ru/forum/dom-window/77689-50%25-massiva-uslovie.html)

NeonMan 07.06.2019 12:04

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;
}

Dilettante_Pro 07.06.2019 12:36

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 + "%");

рони 07.06.2019 13:50

массив половина красных
 
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))

NeonMan 07.06.2019 14:03

Цитата:

Сообщение от Dilettante_Pro (Сообщение 508833)
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
	     }


Часовой пояс GMT +3, время: 04:29.