прошу помочь в оптимизации скрипта
Добрый день.
В скрипте задаются значения переменных 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, время: 05:35. |