http://jsfiddle.net/vol7ron/gfJ28/
var arr = ['hello','goodbye','foo','hello','foo','bar',1,2,3,4,5,6,7,8,9,0,1,2,3];
var hash = [];
// build hash
for (var n=arr.length; n--; ){
if (typeof hash[arr[n]] === 'undefined') hash[arr[n]] = [];
hash[arr[n]].push(n);
}
// work with compiled hash (not necessary)
var duplicates = [];
for (var key in hash){
if (hash.hasOwnProperty(key) && hash[key].length > 1){
duplicates.push(key);
}
}
alert(duplicates);
Результатом будет массив hash
, который будет содержать как уникальный набор значений, так и позицию этих значений. Таким образом, если есть 2 или более позиций, мы можем определить, что значение имеет дубликат. Таким образом, каждое место hash[<value>].length > 1
означает дубликат.
hash['hello']
вернет [0,3]
, поскольку 'hello' был найден в узлах 0 и 3 в arr[]
.
Примечание: длина [0,3]
- это то, что используется для определения, является ли он дубликатом.
Использование for(var key in hash){ if (hash.hasOwnProperty(key)){ alert(key); } }
оповестит каждое уникальное значение.