У меня есть три переменные, a
, b
и c
. Каждая из этих переменных имеет свойство foo
, которое является Boolean
.Эффективный способ поиска элемента в массиве на основе его свойства?
Из a
, b
и c
, ровно два из них имеют их собственность foo
установлен true
.
Что является самым эффективным способом узнать, какой из них установлен в false
?
Чтобы поместить это в контекст, у меня есть функция, которую я хочу сделать некоторые вещи, на основании которых переменная имеет foo
набор для false
, и я не уверен, что это лучший способ пойти об определении того, что переменная false
есть.
E.g. Я мог бы проверить вручную, используя, если такие заявления так:
function doThings():void
{
if (a.foo == true)
{
if (b.foo == true)
{
True = a;
True2 = b;
False = c;
}
else
{
True = a;
True2 = c;
False = b;
}
}
else
{
True = b;
True2 = c;
False = a;
}
//More things...
}
Или иначе я думал о том, чтобы передать две переменные, которые я знаю, есть foo
значение ИСТИНА в качестве аргументов функции, то сделать это:
function doThings(para, para2):void
{
if (a != para && a != para2)
{
False = a;
}
else if (b != para && b != para2)
{
False = b;
}
else
{
False = c;
}
//More things...
}
Боковое примечание: два, которые имеют значение foo
, равны true, являются push
ed в массив во время выполнения, поэтому я не могу точно указать, какой из них программно, но я МОГУ передать их в качестве аргументов функции (ей).
Зная это, я мог бы также точно проверить, какой из них нет в массиве, используя indexOf
, но основы метода все равно останутся прежними.
Это может быть сделано, как это так, без использования параметров:
function doThings():void
{
if (TrueArray.indexOf(a) == -1)
{
False = a;
True = b;
True2 = c;
}
else if (TrueArray.indexOf(b) == -1)
{
False = b;
True = c;
True2 = a;
}
else
{
False = c;
True = a;
True2 = b;
}
//More things...
}
Как можно заметить, второй метод выглядит более привлекательным, и, кажется, самый простой, но я просто интересно, если есть более сложные способы сделать это.
Спасибо за чтение.
Итак ... я должен удалить свой ответ сейчас, когда вы отредактировали весь код в своем ответе? :) – Aaron
Забавно, я собирался сказать что-то, когда пришел ваш ответ. – BadFeelingAboutThis
[Это редактирование] (http://stackoverflow.com/revisions/36457874/3) и [это править] (http://stackoverflow.com/revisions/36457874/4) после моего ответа с почти таким же кодом ... но что бы то ни было, возможно, просто совпадение, это, конечно, не новое решение. – Aaron