Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проверить, все ли элементы массива удовлетворяют условию одновременно (https://javascript.ru/forum/misc/34462-proverit-vse-li-ehlementy-massiva-udovletvoryayut-usloviyu-odnovremenno.html)

Demath 05.01.2013 20:45

Проверить, все ли элементы массива удовлетворяют условию одновременно
 
Подскажите, как проверить, все ли элементы массива удовлетворяют какому-либо условию одновременно.
Что почитать?

Например, мне нужно узнать, все ли элементы числового массива an = [a1,a2,a3,a4,a5] целые, и, если это так, то умножить их на 2, если же хоть один нецелый, то не изменять их.
Как проверять на целость число, знаю: number%1==0.

Получилось проверять только каждый элемент отдельно :(

<script>
function transformSequence(a1,a2,a3,a4,a5)
{
    var an = [a1,a2,a3,a4,a5];

    for (var i=0; i<an.length; i++){ if (an[i]%1==0)  an[i] *= 2; }

    return an.join(', ');
}
</script>

<button onclick="alert(transformSequence(11,-2,3,-4,5))">Проверить 11, -2, 3, -4, 5</button><br>
<button onclick="alert(transformSequence(0.5,2,1,-7,8))">Проверить 0.5, 2, 1, 7, 8</button>

Amphiluke 05.01.2013 21:04

В ECMAScript 5 добавлены соответствующие методы массивов — .every() и .map():
var arr = [11,-2,3,-4,5],
    allInt = arr.every(function (elem) {
        return elem % 1 == 0;
    });
if (allInt) {
    arr = arr.map(function (elem) { return elem * 2; });
}
alert(arr);

Deff 05.01.2013 21:24

<script>
function trsfrmSqnce(a) {return a.join('').search(/,|\./)==-1;}
</script>

<button onclick="alert(trsfrmSqnce([11,-2,3,-4,5]))">Проверить 11, -2, 3, -4, 5</button><br>
<button onclick="alert(trsfrmSqnce([0.5,2,1,-7,8]))">Проверить 0.5, 2, 1, 7, 8</button>

Amphiluke 05.01.2013 21:30

Deff,
1e-1
:)

А, не, черт. .join() преобразует в десятичную нотацию
1e-18

Deff 05.01.2013 21:44

Цитата:

Сообщение от Amphiluke
1e-1

<script>
function trsfrmSqnce(a) {return a.join('').search(/,|e-|\./)==-1;}
</script>

<button onclick="alert(trsfrmSqnce([11,-2,3,-4,5]))">Проверить 11, -2, 3, -4, 5</button><br>
<button onclick="alert(trsfrmSqnce([0.5,2,1,-7,8]))">Проверить 0.5, 2, 1, 7, 8</button>

Amphiluke 05.01.2013 21:47

Deff, тогда уж с флагом i для полноты счастья. :yes:
Хотя необязательно, наверное. join все равно переведет в нижний регистр.

Deff 05.01.2013 21:54

Amphiluke,
Да тут не соль - функция ток проверяет при зараннее заданном условии что все цифры, так шо чисто повыпендривацо

Demath 06.01.2013 00:21

Всем спасибо. Всё пригодилось :thanks:

Demath 06.01.2013 14:08

Цитата:

Сообщение от Amphiluke (Сообщение 225520)
В ECMAScript 5 добавлены соответствующие методы массивов — .every() и .map():
var arr = [11,-2,3,-4,5],
    allInt = arr.every(function (elem) {
        return elem % 1 == 0;
    });
if (allInt) {
    arr = arr.map(function (elem) { return elem * 2; });
}
alert(arr);

Amphiluke, а возможно ли добавить поддержку IE>=8?

А то IE8 пишет, что объект не поддерживает это свойство или метод :-E

Amphiluke 06.01.2013 14:33

https://developer.mozilla.org/en-US/...#Compatibility
https://developer.mozilla.org/en-US/...#Compatibility
или сразу
https://github.com/kriskowal/es5-shim/

Demath 07.01.2013 16:30

Amphiluke,

Спасибо, вроде разобрался :thanks:


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