2014-01-23 6 views
1

Javascript вопрос.Javascript Достаточно ли установить значение boolean в массиве?

Как указано в заголовке, это нормально, чтобы установить логические значения (true или false) в массив и проверить, будет ли после этого один из этих выходов в массиве?

Предположим, у меня есть функция, которая возвращает либо true, либо false.

Пример кода: (используя JQuery)

var abort = [];//make an empty array 

function someFunc() { 
    var returnVal = false; 

    if(some condition) { 
     returnVal = true; 
     return returnVal; 
    } 

    return returnVal; 
} 

someElement.each(function() { 
    abort.push(someFunc()); //push true or false in array 
}); 
//abort array will look eventually something like... 
//[true, false, true, false, false, true, ...] 

//check if `true` exists in array jQuery approach 
var stop = ($.inArray(true, abort) > -1) ? true : false ; 

if(stop) { 
    console.log('TRUE FOUND AT LEAST ONE IN ARRAY!'); 
} 

Это кажется нормально работает. Но мне было просто интересно, если это правильный путь ...

+0

Почему вы даже думаете, что не будет добавлено булево значение в массив? Вы можете поместить любое значение в массив! –

+0

Отлично. Я бы сократил его до функции function somefunc() {return (some condition)} '. И еще более общий: вы используете позже 'Boolean' в' abort'? Если нет, достаточно одного глобального: 'someElement.each (function() {if (! Stop) {stop = someFunc()};});' в этом случае также заменяет материал '.inArray'. – virtualnobi

+0

сколько булевых вам нужно? потому что одно целое может быть удобно использовать и иметь отличные результаты, если вы используете менее 31 логических элементов. Например, вы можете посмотреть мой ответ на этот вопрос: http://stackoverflow.com/questions/18547164/how-to-use-unit8array-in-javascript/18548027#18548027 – GameAlchemist

ответ

0

Если вы не хотите, чтобы вызвать все функции, если какой-либо из функций возврата true, вы можете использовать родной Array.prototype.some метод, как это

if (someElement.some(function(currentObject) { 
    return <a bool value>; 
}))) { 
    console.log("Value exists"); 
} else { 
    console.loe("Value doesn't exist"); 
} 

Например,

var someArray = [1,5,6,8,3,8]; 

if(someArray.some(function(currentObject) { 
    return currentObject === 3; 
})) { 
    console.log("3 exists in the array"); 
} else { 
    console.log("3 does not exist in the array"); 
} 

напечатает

3 exists in the array 

Если вы хотите, чтобы выполнить все функции, независимо от всех результатов, но если вы хотите знать, если по крайней мере один из них вернулся true, то вы можете использовать Array.prototype.reduce, как этот

var someArray = [1,5,6,8,4,8]; 

function printer(currentObject) { 
    console.log(currentObject); 
    return currentObject === 3; 
} 

if(someArray.reduce(function(result, currentObject) { 
    return result || printer(currentObject); 
}, false)) { 
    console.log("3 exists in the array"); 
} else { 
    console.log("3 does not exist in the array"); 
} 

Выход

1 
5 
6 
8 
4 
8 
3 does not exist in the array 
Смежные вопросы