(Untitled)

Oct 07, 2013 10:57


Задача: в js обойти вложенный массив(с разнообразным содержанием) и вывести сумму всех интегеров, содержащихся в нем.

решение:

i.toSource().replace(/\[|\]/g, '').split(', ').forEach(function(a){if(a.match(/^\d$/)) s -= -a})

Leave a comment

Comments 10

dil October 7 2013, 09:44:55 UTC
Аффтар узнал про регулярные выражения!

А вот s -= -a - это отдельная песня ;)

Reply

vogre October 7 2013, 09:51:43 UTC
Да, s-=-a - это такая изюминка в этом торте:)

Reply


trailmax October 7 2013, 11:05:11 UTC
дааа, -= -a это круто! надо будет в своем коде это использовать -)

Reply


alamar October 7 2013, 12:49:08 UTC
Как минимум не сработает в rhino, выводящем числа всегда с десятичной точкой - 13.0, например.

Reply

vogre October 7 2013, 13:12:24 UTC
Это сработает только в фоксе, насколько я понимаю, и только на очень простых данных.

Reply

dil October 7 2013, 14:33:30 UTC
Речь же шла об целых числах

Reply

vogre October 7 2013, 14:52:02 UTC
в js вообще говоря нет интегера, а есть намбер.
на входном значении [10] эта фигня тоже сломается, но это скорее частная бага, нежели системный сбой.

Reply


ex_juan_gan October 7 2013, 15:38:58 UTC
Это гениально.

Reply


belezbar October 7 2013, 16:51:39 UTC
А почему не toString(), а toSource() ? Тогда бы и .replace(/\[|\]/g, '') вроде бы не понадобился бы. Впрочем, смотрел на простом массиве типа s=0; [1, [2,3, [4,5, ['a', 'c']]]].toString().split(',').forEach(function(a){if(a.match(/^\d$/)) s -= -a});

Reply

vogre October 7 2013, 21:10:55 UTC
я не уточнял:)

Reply


Leave a comment

Up