Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   состояние массива (https://javascript.ru/forum/misc/57685-sostoyanie-massiva.html)

ild 14.08.2015 17:59

состояние массива
 
Привет!
Как узнать, что это тот массив, который мне нужен?
Есть массив длиной 5 из bool переменных;
var arr = [];
arr[0]=document.getElementByID['cell'+(index-1)] ? true :false;
arr[1]=document.getElementByID['cell'+(index-2)] ? true :false;
arr[2]=true;
arr[3]=document.getElementByID['cell'+(index+1)] ? true :false;
arr[4]=document.getElementByID['cell'+(index+2)] ? true :false;

Массив принимает разные значения, исключение только 3 элемент, который всегда true. Мне нужно выловить момент, три true вместе идут, то есть:

Код:

[false, false, true, false, false] не подходить

[true, false, true, true, false] не подходить

[false, false, true, true, true] Подходить


EmperioAf 14.08.2015 18:49

вариант, если нужно 3 или больше подряд идущих true выцепить
function fiveBoolean(a,b,c,d,e){
    if (b)
      if (a||d)
        return true;
      else return false;
    else if(d)
      return e;
  }
  alert(fiveBoolean(false, true, true, true, false));
  alert(fiveBoolean(false, false, true, true, false));
  alert(fiveBoolean(false, false, true, true, true));

laimas 14.08.2015 18:52

Берите срез массива, последние три его элемента, и суммируете их, если результат равен 3 - значит тот.

var check = array_name.slice(2).reduce(function(p, c) {
    return p + c
});

ild 14.08.2015 20:10

Спасибо!
var check = function fiveBoolean(a,b,c,d,e){
	if (b){
		if (a&&c) return true;
		if (c&&d) return true;
	}
	if (c){
		if (b&&d) return true;
	}
	if (d){
		if (c&&e) return true;
	}
	return false;
}

рони 14.08.2015 20:45

ild,
function check(a,b,c,d,e){
	return a && b || b && d || d && e;
}

alert(check(true, false, true, false, true))//false
alert(check(false, false, true, true, true)) //true
alert(check(true, false, true, true, false))//false

EmperioAf 14.08.2015 20:52

Цитата:

Сообщение от рони (Сообщение 384302)
ild,
function check(a,b,c,d,e){
	return a && b || b && d || d && e;
}

alert(check(true, false, true, false, true))//false
alert(check(false, false, true, true, true)) //true
alert(check(true, false, true, true, false))//false

блин, ну ты красавчик!! Не могу, к сожалению, плюсануть, но это такая красота!:victory:

nerv_ 14.08.2015 21:05

рони,
только

function check(a,b,c,d,e){
	return a && b || b && c || d && e;
}

alert(check(true, true, false, false, false)) //true
alert(check(false, true, true, false, false)) //true
alert(check(false, false, false, true, true)) //true


/(?:true){3,}/.test([false, false, true, true, true].join(''))

но я бы так не делал :)


function check(a,b,c,d,e){
    return (a && b && c) || (b && c && d) || (c && d && e);
}

alert(check(true, true, false, false, false)) //false
alert(check(false, true, true, false, false)) //false
alert(check(false, false, false, true, true)) //false
alert(check(true, false, true, false, true))//false
alert(check(false, false, true, true, true)) //true
alert(check(true, false, true, true, false))//false

рони 14.08.2015 21:11

nerv_,
всё ок без только - с по умолчанию true
Цитата:

Сообщение от ild
Массив принимает разные значения, исключение только 3 элемент, который всегда true.

а
Цитата:

Сообщение от nerv_
b && c

опечатка
давно исправлено на b && d

ild 14.08.2015 21:46

Круто. Спасибо!

ild 18.08.2015 00:28

а как подсчитать, сколько в данный момент в массиве количество true?


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