05.01.2013, 20:45
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Проверить, все ли элементы массива удовлетворяют условию одновременно
Подскажите, как проверить, все ли элементы массива удовлетворяют какому-либо условию одновременно.
Что почитать?
Например, мне нужно узнать, все ли элементы числового массива 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>
Последний раз редактировалось Demath, 01.01.2014 в 22:25.
|
|
05.01.2013, 21:04
|
|
☽
|
|
Регистрация: 07.01.2011
Сообщений: 254
|
|
В 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);
|
|
05.01.2013, 21:24
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
<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>
Последний раз редактировалось Deff, 05.01.2013 в 21:26.
|
|
05.01.2013, 21:30
|
|
☽
|
|
Регистрация: 07.01.2011
Сообщений: 254
|
|
Deff,
1e-1
А, не, черт. .join() преобразует в десятичную нотацию
1e-18
Последний раз редактировалось Amphiluke, 05.01.2013 в 21:32.
|
|
05.01.2013, 21:44
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от 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>
|
|
05.01.2013, 21:47
|
|
☽
|
|
Регистрация: 07.01.2011
Сообщений: 254
|
|
Deff, тогда уж с флагом i для полноты счастья.
Хотя необязательно, наверное. join все равно переведет в нижний регистр.
Последний раз редактировалось Amphiluke, 05.01.2013 в 21:50.
|
|
05.01.2013, 21:54
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Amphiluke,
Да тут не соль - функция ток проверяет при зараннее заданном условии что все цифры, так шо чисто повыпендривацо
|
|
06.01.2013, 00:21
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Всем спасибо. Всё пригодилось
|
|
06.01.2013, 14:08
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Сообщение от Amphiluke
|
В 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 пишет, что объект не поддерживает это свойство или метод
|
|
06.01.2013, 14:33
|
|
☽
|
|
Регистрация: 07.01.2011
Сообщений: 254
|
|
|
|
|
|