Когда все, что вам нужно, это проверить, что нет дубликатов, как указано в этот вопрос , вы можете использовать метод <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/every" rel="nofollow noreferrer">every()</a>
:
[1, 2, 3].every(function(elem, i, array){return array.lastIndexOf(elem) === i}) // true
[1, 2, 1].every(function(elem, i, array){return array.lastIndexOf(elem) === i}) // false
Обратите внимание, что every()
не работает для IE 8 и ниже.
Я использую lastIndexOf()
, потому что он может быть более эффективным, чем indexOf()
, если функции обратного вызова, сделанные every()
, выполняются в порядке индекса, но это не доказано.
В CoffeeScript Я использую это:
Array::duplicates = -> not @every((elem, i, array) -> array.lastIndexOf(elem) is i)
[1, 2, 3].duplicates() // false
[1, 2, 1].duplicates() // true