Быстрый и элегантный способ с использованием деструктуризации и уменьшения объектов es6.
. Он работает в O (n) (1 итерация по массиву) и не повторяет значения, которые появляются более чем в 2 времена
const arr = ['hi', 'hi', 'hi', 'bye', 'bye', 'asd']
const {
dup
} = arr.reduce(
(acc, curr) => {
acc.items[curr] = acc.items[curr] ? acc.items[curr] += 1 : 1
if (acc.items[curr] === 2) acc.dup.push(curr)
return acc
}, {
items: {},
dup: []
},
)
console.log(dup)
// ['hi', 'bye']
технически хэш SHA1 - это число, просто он чаще всего кодируется в базе 16 (что и делает PHP sha1 ()), так что почти всегда в нем есть буква. Однако нет никакой гарантии.
Шансы 160-битного числа в шестнадцатеричном коде без цифр AF равны (10/16) 40 или примерно 6,84227766 × 10 -9
Хэш SHA-1 представляет собой 160-битное число. Для удобства записи обычно пишут в шестнадцатеричной системе счисления. Шестнадцатеричные (основание 16) цифры - это 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e и f. В буквах нет ничего особенного. Каждый шестнадцатеричный символ эквивалентен 4 битам, что означает, что хэш может быть записан в 40 символов.
Я не верю, что есть какая-либо причина, по которой хеш SHA-1 не может содержать никаких букв, но это маловероятно. Это похоже на генерацию случайного числа из 40 цифр (с основанием 10) и отсутствие семерки, восьмерки или девятки.
Вы можете представить вывод SHA1 (как и любые двоичные данные) в любой базе, которую хотите. В частности, вы можете закодировать результат в формате base-8/10.