2015-05-22 1 views
2

У меня есть массив как этотопределить truthy значения для массива

var promises = [true,false,true,true,false]; 

Что может быть лучшим способом для определения truthy результирующей от всех значений?

Я могу использовать forEach или for in, но есть ли другой лучший способ?

Я не использую символ подчеркивания или lodash, но используя jQuery.

E.g. в случае выше результата будет false.

В основном правдивый результат - это операция И для всех значений.

+0

'.filter' может быть верным решением, на мой взгляд, независимо от того, что вы ожидаете (что неясно). После редактирования '.every' или' .some', вероятно, являются самым быстрым и чистым способом достижения результата. – briosheje

+1

Пожалуйста, определите «истинное значение, полученное из всех значений». – Oleg

+0

Вы хотите знать, являются ли все ценности правдивыми или если кто-либо из них правдивый? См. [Array.prototype.every] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every) и [Array.prototype.some] (https: // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some) – Barmar

ответ

3

Вы можете использовать .every, как так

var promises = [true,false,true,true,false]; 
 
//var promises = [true,true,true,true,true]; 
 

 
var isTrue = promises.every(function (el) { 
 
    return el === true; 
 
}) 
 

 
console.log(isTrue);

+0

Спасибо @Alexander :) – Sushant

2

немного поразвлечься с помощью рекурсии:

function truthy (a) { 
    return function aux (a, i) { 
     return i === a.length || !!a[i] && aux(a, ++i); 
    }(a, 0); 
} 

Использование:

truthy([]); // true 
truthy([true]); // true 
truthy([true, 0]); // false 
truthy([true, '']); // false 
+0

Другие интересные тесты: 'правша ([]); // true', но 'правша ([null]); // false. Между тем неопределенные переменные обрабатываются по-разному. Например: 'var somevar; truthy ([somevar]); // false' while 'truey ([someothervar])' throws 'Некачать ReferenceError: someothervar не определен'. Кажется философским, чтобы обсуждать, является ли пустой массив истинным, в то время как массив с только нулевой записью является ложным, но более прагматичным, чтобы определить, следует ли предполагать «неопределенную» ссылку в массиве как возможного члена массива и отличать как FALSE, или если ввод этот «тип» должен потерпеть неудачу на более низком уровне – Anthony

+0

@ Энтони Я не уверен, что понял: - | переменная 'undefined' и' ReferenceError' - это разные вещи. – leaf

+0

Все в порядке. Оказывается, что ReferenceError бросается в точку экземпляра массива, а не в правдивую функцию, поэтому он никогда не достигает истинной функции из-за ReferenceError. Таким образом, идея о том, что член массива может быть неопределенной и необъявленной ссылкой на переменную (например, '[someNewVar]'), что функция правды должна будет предвидеть обработку, на самом деле невозможна, поскольку пытается создать/обновить массив с такими переменная не работает до того, как этот массив можно использовать в другом месте. – Anthony