Доброе утро всем, у меня следующая проблема, у меня есть массив, подобный следующему:
["FI29","FI09","JM15","FI29"]
Я ищу какой-то метод или способ узнать, повторяется ли элемент в моем массиве, я хотел бы получить что-то вроде этого:
["FI29","FI09","JM15","FI29"]//devuelve true
["FI29","FI09","JM15","FI28"]//devuelve false
Я читал о методах every()
and some()
, но не понимаю, как они могут мне помочь. Кто-нибудь знает, как это сделать? Первое, что приходит в голову — пройтись по массиву вложенным образом, чтобы он сравнивал, есть ли повторяющиеся элементы, но мне это кажется очень надуманным. В любом случае, я изложил свою идею здесь:
var array=["FI29","FI09","JM15","FI29"]//devuelve true
//["FI29","FI09","JM15","FI28"]//devuelve false
var repetido = false;
for (var i = 0; i < array.length; i++) {
for (var j = 0; j < array.length; j++) {
if (array[i] == array[j] && i != j) { //revisamos que i sea diferente de j, para que no compare el mismo elemento exacto.
repetido= true;
}
}
}
console.log(repetido);
Можно использовать метод, аналогичный предложенному в этом ответе Stack Overflow на вопрос, как получить уникальные значения массива.
следующая функция
сообщит вам, если элемент
valor
, который занимает местоindice
внутриlista
данного, появляется в этом списке впервые. Трюк основан на том, чтоlista.indexOf(valor)
он возвращает индекс первого вхождения значения. Если он соответствует параметруindice
, он появляется впервые. Если нет, то нас ждет второй, третий и т. д.Аналогично вы можете определить его противоположность:
Имея эти функции, легко делать то, что хочешь. В списке нет повторяющихся элементов, если ВСЕ они (каждый) появляются впервые. Следовательно:
lista.every(esPrimero)
дастtrue
в этом случае иfalse
если в нем есть повторяющиеся элементы.Если вы хотите обратное условие, список будет иметь повторяющиеся элементы до тех пор, пока НЕКОТОРЫЕ из них (некоторые) не появятся в первый раз. Следовательно, она
lista.some(noEsPrimero)
будет даватьtrue
в этом случае и в том случаеfalse
, если все элементы разные.показывать
Это можно сделать очень просто с помощью функции, которая проверяет, повторяется ли какой-либо элемент массива в остальной его части, запрашивая от последующей позиции (позиция + 1) каждого элемента и далее.
Для этого вы можете использовать функцию
some()
, которая проверяет, соответствует ли какой-либо элемент массива условию, и функциюindexOf()
, которая указывает, существует ли значение в массиве с одной позиции и далее, оставляя код следующим образом:Я считаю, что это более упрощенный и точный способ, чем мой первоначальный предыдущий ответ.
Предыдущий ответ
Для этого вы можете сначала использовать функцию для удаления повторяющихся элементов, а затем сравнить этот новый массив с исходным:
Я надеюсь, что вы найдете это полезным, приветствую.
Это можно сделать с помощью
new Set(array)
, при этом получается новый Set of elements (множество элементов), которые не повторяются.Количество элементов в наборе получается с помощью
size
. Всегдаsize
будет меньше или равно исходной сумме массива, поэтому, чтобы узнать , нет ли в нем повторов, вы можете сравнить, что онnew Set(array)
равенarray.length
, но если вы хотите узнать , есть ли в нем повторы, вы проверяете, что он отличается следующим образом.Источник: комментарий в чате SOes (от Pablo Lozano и lois6b)
Код:
Недавно я опубликовал ответ, но он был удален. Я не знаю, почему. Что ж, говоря об обнаружении повторяющихся элементов массива, это так же просто, как отсортировать массив и определить, совпадают ли следующий и предыдущий элементы. Операция выполняется с помощью цикла for.
Я положил полную страницу, чтобы увидеть это. Это код: