Javascript поиск дубликатов с исключением

У меня имеются след. переменные :

var a2 = 3;
var b2 = 10;
var c2 = 3;
var d2 = 3;
var e2 = 10;

var wild =10;

Задача пройтись по порядку от a2 до e2 в поиске дубликатов , и вызывать функцию console.log(); при совпадении каждой комбинаций (a2,b2,c3) , (a2,b2,c3,d2) , (a2,b2,c3,d2,e2) проверку должны пройти комбинации с одинаковыми значениями от начала до конца:

true, если значение по прядку совпадают :
если :
a2=0,b2=0,c2=0
вызвать функцию 1
если :
a2=0,b2=0,c2=0,d2=0
вызвать функцию 2
если :
a2=0,b2=0,c2=0,d2=0,e2=0
вызвать функцию 3

false , если значение одного из элементов отличается от ряда дубликатов .
например :
a2=1,b2=0,c2=0
a2=0,b2=1,c2=0,d2=0
a2=0,b2=0,c2=1,d2=0,e2=0

Но главная задача является добавить исключение , а именно переменную wild которая = 10.

например такой ряд комбинации считается true:
a2=10,b2=0,c2=0
a2=0,b2=10,c2=0,d2=0
a2=0,b2=0,c2=10,d2=0,e2=0

Без данного исключения (wild) поиск и сравнение можно было бы реализовать данным образом

//Проверка дубликатов
if(a2==b2){
console.log("a2==b2");
if(b2==c2){
console.log("b2==c2");
if(c2==d2){
console.log("c2==d2");
if(d2==e2){
console.log("d2==e2");
}
}
}
}

Подскажите как в данную конфигурацию добавить wild как исключение.


Ответы (1 шт):

Автор решения: vsemozhebuty

Так подходит?

function test(wild, a2, b2, c2, d2, e2) {
  var firstNotWild = [a2, b2, c2, d2, e2].find(num => num !== wild);
  var valid = new Set([wild, firstNotWild ?? wild]);

  if(valid.has(a2) && valid.has(b2)) {
    console.log("a2==b2");
    if(valid.has(c2)) {
      console.log("b2==c2");
      if(valid.has(d2)) {
        console.log("c2==d2");
        if(valid.has(e2)) {
          console.log("d2==e2");
          console.log("All match.");
        }
      }
    }
  }
}

test(10, 3, 3, 3, 3, 3)
test(10, 3, 10, 3, 3, 10)
test(10, 10, 10, 10, 10, 10)
test(10, 3, 10, 3, 0, 10)

Вариант 2:

test(10, { a1: 3, b1: 3, c1: 3, d1: 3, e1: 3 });
test(10, { a2: 3, b2: 10, c2: 3, d2: 3, e2: 10 });
test(10, { a3: 10, b3: 10, c3: 10, d3: 10, e3: 10 });
test(10, { a4: 3, b4: 10, c4: 3, d4: 0, e4: 10 });

// Функцию также легко вызывать с переменными:

const a5 = 3;
const b5 = 10;
const c5 = 3;
const d5 = 3;
const e5 = 10;

test(10, { a5, b5, c5, d5, e5 });

function test(wild, numbers) {
  console.log(JSON.stringify(numbers));

  const keys = Object.keys(numbers);
  const values = Object.values(numbers);

  const firstNotWild = values.find(num => num !== wild);
  const valid = new Set([wild, firstNotWild ?? wild]);

  for (let i = 0; i < values.length - 1; i++) {
    if (valid.has(values[i]) && valid.has(values[i + 1])) {
      console.log(`${keys[i]}==${keys[i + 1]}`);
    } else {
      break;
    }
  }
}

→ Ссылка