JavaScript
function chkDuplicates(returnValues,arr) {
arr = arr || this;
let len = arr.length;
let tmp = {};
const arrtmp = arr.slice();
const dupes = [];
arrtmp.sort();
while(len--){
let val = arrtmp[len];
if (/nul|nan|infini/i.test(String(val))) { val = String(val); }
if (tmp[JSON.stringify(val)]){
if (!returnValues) {return true;}
dupes.push(val);
}
tmp[JSON.stringify(val)] = true;
}
return !returnValues ? false : dupes.length ? dupes.reverse() : null;
}
// to *not* pollute the global namespace, see
// https://github.com/KooiInc/ProtoXT
Array.prototype.dupes = Array.prototype.dupes || chkDuplicates;
//usage examples
$H.displayln (
'<code>[1,2,3,4,5] .dupes()</code> => '+
[1,2,3,4,5].dupes(),
'<code>[1,2,3,4,5,9,10,5,1,2] .dupes()</code> => '+
[1,2,3,4,5,9,10,5,1,2].dupes(),
'<code>[{a:1,b:2},1,2,3,4,{a:1,b:2},[1,2,3]] .dupes()</code> => '+
[{a:1,b:2},1,2,3,4,{a:1,b:2},[1,2,3]].dupes(),
'<code>[null,1,2,3,4,{a:1,b:2},NaN] .dupes()</code> =>'+
[null,1,2,3,4,{a:1,b:2},NaN].dupes(),
'<code>[1,2,3,4,5,1,2] .dupes(true)</code> => '+
[1,2,3,4,5,1,2].dupes(true),
'<code>[1,2,3,4,5] .dupes(true)</code> => '+
[1,2,3,4,5].dupes(true)
);