04.05.2016, 11:30
|
Новичок на форуме
|
|
Регистрация: 28.04.2016
Сообщений: 3
|
|
прошу помочь в оптимизации скрипта
Добрый день.
В скрипте задаются значения переменных 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);
|
|
04.05.2016, 12:08
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Разница массивов
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>
Последний раз редактировалось рони, 04.05.2016 в 12:10.
|
|
04.05.2016, 12:39
|
Новичок на форуме
|
|
Регистрация: 28.04.2016
Сообщений: 3
|
|
рони,
гениально, спасибо. Теперь буду разбираться, как оно работает.
Последний раз редактировалось Pinguin, 04.05.2016 в 12:42.
|
|
04.05.2016, 14:59
|
|
Профессор
|
|
Регистрация: 18.05.2011
Сообщений: 1,207
|
|
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>
|
|
04.05.2016, 17:04
|
Новичок на форуме
|
|
Регистрация: 28.04.2016
Сообщений: 3
|
|
destus,
спасибо за информацию.
|
|
05.05.2016, 01:05
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
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 ]
Вариант.
Последний раз редактировалось Vlasenko Fedor, 05.05.2016 в 01:40.
|
|
|
|