прошу помочь в оптимизации скрипта
Добрый день.
В скрипте задаются значения переменных a1, a2, a3, a4 и сравниваются с переменными x1, x2, x3, x4, x5, x6, x7. Значения переменных x1-x7, не совпавшие с a1-a4, выводятся в консоль. Скрипт крайне корявый и в случае его расширения он станет очень большим и плохо редактируемым. Планируется добавление переменных a и x. Прошу помочь, как его можно привести в адекватный вид. Спасибо. var a1 = 5; var a2 = 3; var a3 = 2; var a4 = 1; var x1 = 1; var x2 = 2; var x3 = 3; var x4 = 4; var x5 = 5; var x6 = 6; var x7 = 7; if (x1 != a1 && x1 != a2 && x1 != a3 && x1 != a4) console.log (x1); if (x2 != a1 && x2 != a2 && x2 != a3 && x2 != a4) console.log (x2); if (x3 != a1 && x3 != a2 && x3 != a3 && x3 != a4) console.log (x3); if (x4 != a1 && x4 != a2 && x4 != a3 && x4 != a4) console.log (x4); if (x5 != a1 && x5 != a2 && x5 != a3 && x5 != a4) console.log (x5); if (x6 != a1 && x6 != a2 && x6 != a3 && x6 != a4) console.log (x6); if (x7 != a1 && x7 != a2 && x7 != a3 && x7 != a4) console.log (x7); |
Разница массивов
Pinguin,
<script> function fn(b, a) { a = a.slice(); b = b.slice(); return a.filter(function(a) { return !~b.indexOf(a) }) }; document.write(fn([5,3,2,1],[1,2,3,4,5,6,7])+"<br>"); </script> |
рони,
гениально, спасибо. Теперь буду разбираться, как оно работает. |
Pinguin,
Также можно посмотреть в сторону небольших библиотек lodash или underscore, поддерживающих фичи для коллекций, массивов и функций. Там всё делается в одну строчку. <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> <script> alert(_.difference([1, 2, 3, 4, 5, 6, 7], [5, 3, 2, 1])); </script> |
destus,
спасибо за информацию. |
function difference(a, b) { b.length > a.length && ([b,a] = [a,b]); return a.filter(function(a) { return b.indexOf(a) == -1; }); } var a = [1,2,3,4,5,6,7], b = [5,3,2,1]; alert(difference(a, b)); //[ 4, 6, 7 ] alert(difference(b, a)); //[ 4, 6, 7 ] Вариант. |
Часовой пояс GMT +3, время: 22:24. |