Сравнить переменные между собой
Допустим, у меня 5 переменных. Есть какой-нибудь рациональный сравнить их между собой? Я пока остановился на этом:
if (q1 != q2 && q1 != q3 && .... && q4 != q5) { alert ('Совпадений нет!') } else { alert ('Есть совпадения!') } Как вы поняли, если переменные все разные, то вывести надо "Совпадений нет", а если какие-либо из них имеют одинаковые значения - вывести "Есть совпадения"! |
какие в них данные ожидаются?
|
forEach, filter, map, indexOF циклы и тд. Думаю много еще чего придумать можно
|
aklis, строка со строкой
Для примера: q1 = 'Name 1'; q2 = 'Name 2'; q3 = 'Name 3'; q4 = 'Name 4'; q5 = 'Name 5'; Значения этих переменных выбираются пользователем и могут быть одинаковыми. |
в массив их обернуть можно и любым перебирающим методом проверить. Я бы советовал map или filter - если нужно собрать все совпадения. Если просто установить есть ли хоть одно то хорошо подойдет indexOF
|
aklis,
о, а до этого я как-то не додумался, спасибо) |
Можно сделать в пару строк, используя оператор spread, тип Set и метод Set.prototype.size в es6.
|
хм
|
var data = ["Ваня", "Петя", "Кузя", "КуКузя", "Ваня"]; var filtered = data.filter(function(item, i, arr){ if(~arr.indexOf(item)) return true; return false; }); destus, подскажи пожалуйста: почему не сработало так? Никак не пойму где я ошибся. |
let data = ['Name 1', 'Name 2', 'Name 3', 'Name 4', 'Name 5'], set = new Set(data); set.size === data.length ? alert('Совпадений нет!') : alert('Есть совпадения!'); |
Цитата:
var data = ["Ваня", "Петя", "Кузя", "КуКузя", "Ваня"]; var filtered = data.filter(function(item, i, arr){ return arr.indexOf(item) === i; }); alert(filtered); |
Все до меня дошло:)
|
Дело в том что калбэк раз за разом берет значение из массива чтобы искать его в том де массиве, конечно оно там есть=) И так получается что все элементы попадают в результат.
|
destus,
вот только значения в массив у меня будут заносить сами пользователи.. будет что-то типа такого: data = []; data[0] = q1; data[1] = q2; data[2] = q3; data[3] = q4; data[4] = q5; |
для добавления push пригодится:)
|
Ещё вопрос:
Если все переменные равны, то вывести "Все переменные равны" :) Сейчас у меня что-то типа такого: var persclass_Arr = []; persclass_Arr[0] = q1; persclass_Arr[1] = q2; persclass_Arr[2] = q3; persclass_Arr[3] = q4; persclass_Arr[4] = q5; set = new Set(persclass_Arr); set.size === persclass_Arr.length ? classsov = 0 : classsov = 1; // 0 - есть совпадение, 1 - совпадений нет |
Регулярки наверное можно использовать. Очень мощный инструмент для строк. Я пока только мельком читал про них, так что точно не скажу.
|
Ermite,
if (set.size === 1 && persclass_Arr.length > 1) |
Часовой пояс GMT +3, время: 22:59. |