function now()
{
const hr = process.hrtime();
return hr[0] * 1000 + hr[1] / 1e6;
}
var arr=[];
var t1=now();
for(var i=0;i<10000;i++) arr.push([Math.floor(Math.random()*5),Math.random().toString(36),Math.random().toString(36)]);
var t2=now();
console.log('fill:',t2-t1,'ms');
var t1=now();
var res=arr.filter((n, i, a) => a.filter(m => m[0] === n[0]).length > 1);
var t2=now();
console.log('filter:',t2-t1,'ms');
var t1=now();
//
var idx=new Map();
arr.forEach(function(a,i){
if(idx.has(a[0])) idx.get(a[0]).push(i);else idx.set(a[0],[i]);
});
var res=[];
idx.forEach(function(a,i){
if(a.length>1) a.forEach((b)=>res.push(arr[b]));
})
//console.log(res);
//
var t2=now();
console.log('using keys:',t2-t1,'ms');
filter: 3138.7109000086784 ms
using keys: 5.453900039196014 ms
примерно так