Created
January 10, 2017 11:59
-
-
Save cevek/aa8f5a236d2907b4508c371e815ebf0f to your computer and use it in GitHub Desktop.
relate two arrays using key with full scan and Map
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var strings = ["eqwed", "cfjnf", "ekttp", "dghnc", "wcdkt", "quwuj", "almt", "beijl", "tjdku", "gfpit", "frpap", "mrrbo", "hquup", "tlvb", "ciubn", "qamk", "bohgl", "ufpti", "omelp", "vssmj", "repvs", "gwgbp", "ltwog", "lpcnh", "nngsq", "ejkke", "uvohi", "rshow", "rkmvo", "suffs", "dncla", "nmewm", "ccepr", "ggura", "ssjct", "ndfwb", "trjof", "risin", "baqlf", "ari", "lubqt", "atlue", "atrgo", "wrnsn", "quwrf", "fvkse", "norah", "cuora", "dawng", "ueowi", "abidd", "svif", "salbk", "sdhkt", "ewpoe", "rth", "uqbwk", "qtvnc", "obevu", "cadjr", "wvqub", "oemji", "gnoak", "lqhpb", "esndj", "vwbgm", "thhql", "gwdsu", "raleg", "wmofv", "dinmj", "evjtt", "bjisl", "lmbrn", "pglqh", "uvbbi", "rocbg", "ltgmr", "umqwv", "iidcm", "plcie", "hqlww", "somtl", "gldng", "cwmgh", "mhve", "vjrru", "lcvjp", "mjfff", "nohwu", "bjqoi", "wftgf", "atgn", "gl", "pmuiq", "fjqka", "swdpi", "hmt", "vgmju", "mko", "img", "ocdeb", "ihglv", "niiug", "mbeeu", "rrwsh", "scdvj", "ofpsj", "qlkdn", "habkd", "jbonc", "mdmrc", "sqiro", "rmhn", "shmgt", "tntbh", "fqgjo", "afenb", "lfapa", "netaq", "vlolf", "ufqep", "somwl", "awnee", "vplbi", "birwo", "uukpw", "gcmbv", "kvljf", "eoqom", "etmgq", "okeqf", "pgrd", "bkhuu", "fvvvn", "mqma", "caqkj", "fgest", "dulnt", "cucbb", "ofeq", "uhtel", "ewlju", "aojig", "atbps", "fsjea", "itvhl", "dqpmi", "gjpm", "aqqem", "ejobd", "ouqlm", "decvl", "uimec", "kvkea", "vkeln", "uchld", "ejfpw", "hjlfp", "ocdtd", "gnpiu", "mbtkd", "mktnd", "wbkb", "bbqb", "kgdme", "epnpo", "omuuj", "vaaid", "rmipv", "nrgb", "sswee", "dpwiq", "pnfko", "dbdre", "wmqtd", "qugve", "vtuql", "mjftd", "cmgpo", "ukqf", "wbulr", "cvdig", "ompur", "ulhic", "srof", "mvnjg", "reiq", "njrme", "ejuj", "sdvpt", "meikt", "kqobn", "urdsm", "jjbsl", "umpwf", "qmlma", "jqwus", "jvcla", "cmrq", "odfcn", "ibgj", "aavsq", "ptfdj", "snrjh", "gfpcm", "wclee", "hiqkr", "ljmhu", "gwpuj", "qaqgg", "gqqev", "hpofr", "whnhi", "dekvc", "bwnkh", "jvika", "hpeko", "muhew", "ulpgr", "nbmqo", "bcioa", "kcijo", "telnt", "hjcut", "bhljw", "febgi", "mtmwm", "nhigm", "nmdjp", "ijksm", "hvbhl", "uowgm", "llsrm", "rmmsn", "djphm", "mriqh", "bfars", "afe", "fqjvh", "wrmpm", "couam", "ndvi", "caegk", "nopfa", "gakvc", "pqssw", "ipceg", "emg", "iuhhv", "cvhmn", "iarkw", "qcagf", "sqboq", "uwcwr", "ooad", "jjumu", "nqige", "dqnmg", "bpbhf", "tchew", "oecuc", "hwtli", "vinir", "koped", "lrco", "dnqet", "llihn", "dhhrv", "gullu", "dwqgc", "qingf", "apued", "iutjp", "cbrbi", "uewr", "aql", "ig", "oar", "uenha", "kqbpu", "dcu", "svagq", "pfldn", "jerju", "bmkjh", "wahfb", "ajbj", "lqnjk", "tjeok", "ivptf", "taati", "jlkua", "hqmk", "cafmg", "vqqjb", "wrkmk", "qfsia", "udcrl", "uggtn", "hhisq", "jcwme", "hjtui", "smico", "jnpba", "kkcqj", "mwhmk", "sgron", "wpoqq", "gcakj", "pblun", "didab", "amiws", "gldpm", "hhohi", "efbfd", "qnwce", "krgni", "rlsrl", "eqnk", "bvtj", "cknrq", "fnmij", "gtflh", "qamsf", "mtefa", "pskbe", "eotic", "vkfjb", "juivc", "qsbhs", "ufsn", "peltg", "updpv", "jsibj", "snnet", "rsash", "mmslq", "phtek", "iqoaw", "sjqbb", "gicko", "mfdqi", "tjphp", "wtvco", "pjwqc", "civws", "esitc", "nrbke", "fb", "hcfc", "rasvk", "johka", "jgjoi", "cie", "hgajv", "weecs", "rscmg", "hbdpp", "lgeuj", "vbflu", "legpf", "lbons", "juqrm", "lwldp", "idfln", "kllql", "knwnp", "jbgeh", "dped", "keft", "mfjpm", "brvkd", "wdlo", "nmmrt", "kaln", "mbobf", "rjmom", "qhemh", "cmclh", "snauq", "ovmhk", "hqtmd", "gkste", "pveca", "urpff", "poliw", "qjvbt", "ssser", "bwmoe", "sfqlu", "gcots", "gsjie", "msmi", "tudub", "kitbp", "djhcf", "kqsnj", "wmbeq", "aobgl", "vftsl", "hdcav", "ndrhf", "vtvao", "glddo", "grnla", "sjecv", "njjiv", "wrqnt", "klint", "slqkb", "flj", "cmiuc", "vniw", "fvmlu", "otuqw", "tgoho", "pqujn", "eolhf", "scnlf", "pslcg", "plqie", "rgrke", "osuna", "thhoe", "lchv", "htqhe", "urbjp", "otqhd", "eqvkj", "edotj", "jpcpw", "tegpg", "fphce", "hfojn", "ephww", "pvmuk", "hgunt", "pvrqk", "imums", "agflo", "rtgop", "qsnlu", "rbmqw", "dangj", "fogqm", "twqbi", "olaqt", "iudvd", "jdngr", "gjwau", "tenji", "briof", "qvcai", "fmhsm", "britc", "hqrvg", "cqd", "pnpso", "fafis", "wscel", "kedns", "bmebj", "arhss", "jrklw", "wwkpv", "qbmfu", "qahq", "varic", "adikt", "hsufv", "pejci", "lrrft", "flogg", "euqm", "pntwa", "gvraq", "evjeg", "kldwg", "osaer", "drmgj", "osurh", "ppgqc", "lbrf", "ejini", "dsifd", "ambgg", "ujfrw", "qbpbb", "brlkm", "rgujc", "qbtkj", "kqpgw", "lolbn", "heqwe", "uweig", "wvvo", "pkrcl", "pcedi", "alfjw", "alnql", "fvobt", "wqfmu", "rinbc", "kqitp", "ckmva", "uwban", "ievng", "dqhle", "ugkvm", "clwou", "knksi", "nsmv", "pwtgf", "juung", "lpeqv", "iaufk", "odt", "vlhts", "squtb", "skqfs", "dgouj", "ndwvt", "fshaj", "pmckr", "nsiwv", "jghhc", "lhpwa", "hsbbl", "oskug", "dvo", "tnbqp", "iwmue", "mkmmp", "arueu", "egesp", "gfwbr", "njmrk", "fqgrd", "wcgn", "putp", "tmtir", "braep", "qibpp", "hcndk", "qghil", "qoq", "ibatm", "cnqdd", "jjjrp", "eugjd", "eiom", "scwsm", "rtctn", "knddh", "glftl", "bruev", "rftpu", "bjudd", "qqiuv", "gqoco", "oiadb", "ectti", "asuab", "tpubb", "upkhw", "fwd", "cnfmo", "idmpv", "rfbdb", "amu", "wrew", "gq", "tgqew", "hbfnj", "fbmvq", "vf", "odkat", "kokow", "kaufo", "dewnb", "ptnq", "lemfu", "sckce", "fmgar", "qrhkf", "vpsro", "ogohn", "vgbcj", "mtwbs", "pbqpl", "paech", "kpte", "oupii", "sgrpq", "ufohs", "drku", "tgolv", "orqjj", "jtmcg", "tqctt", "hsjgi", "sutgs", "ktnvn", "nwtfj", "jqtmr", "nlfdk", "nghsl", "fbw", "ffnsi", "snbw", "vuomi", "slfsf", "oupd", "kbtke", "hvnkt", "ucnps", "uqftl", "qjfl", "swwto", "ifhew", "teowf", "sjgso", "wrshi", "mkikd", "kjdjh", "ocvge", "mruni", "dkwam", "vvgri", "pnbvv", "outcu", "cdkpu", "oqued", "tldv", "tshak", "cbpig", "wsaod", "idusa", "whlp", "safah", "ukega", "haew", "svolt", "kvvlu", "opuue", "mcohu", "gdimb", "rmrh", "mjnqm", "ghitv", "dtemr", "npkeu", "pnqob", "nnase", "bgcvv", "ffkfm", "pqdfk", "garrv", "wbciw", "muvps", "bdndo", "hafsq", "mkkup", "ntkrj", "uhtou", "sbsut", "hoqjf", "ofwkn", "acf", "gnpvn", "jnkkp", "wdoss", "cvqbe", "eawwg", "gnash", "mqmpk", "ccmaw", "ttvtj", "fjiam", "kqcmr", "wljlg", "aarfd", "nhfs", "cwnop", "qqalt", "loeag", "htlpb", "cclws", "nsrbs", "ntccp", "hdcai", "dhswm", "jobhp", "mljnn", "pbipu", "oiopk", "dosss", "kiueo", "veawq", "dhmka", "wnfbm", "cokgl", "gtm", "tkbrm", "vwgwo", "dwrk", "vumbi", "vvnea", "qmewk", "wuumm", "udtn", "wsdif", "rcsjg", "dgfjr", "rjejt", "fjqrl", "jghug", "vfeto", "rhavt", "lerwm", "uvbpo", "ctdg", "owchl", "bglth", "ragws", "glivw", "flvdj", "qowpl", "tkcee", "dsvpa", "acsql", "forjr", "mjfvp", "pjwhp", "eeweh", "qorur", "wqltk", "dnwjg", "qrqjj", "wnldw", "cghve", "hnwsw", "storr", "epkse", "ldcdk", "lrr", "wqsqt", "lbrqb", "ocrk", "orjjh", "or", "lignn", "ugaae", "hqeqv", "pfgnv", "bcutb", "fedsu", "ithb", "tdnkc", "jqscc", "elqje", "fumok", "ndthw", "jeejh", "ipkmd", "mwnmf", "kaifk", "hvjfw", "gobha", "sofbc", "rhggr", "cpsfk", "humrw", "aoodr", "sutrv", "saupr", "vjpwn", "fgglt", "aqale", "qfnee", "qjfnu", "jtbbj", "nrchh", "edvqg", "ofqpm", "lhj", "hlta", "orjue", "kppfg", "ohjbe", "cbtig", "sgtwm", "chqrv", "acw", "qiuvl", "awmbk", "rfafl", "vohrp", "wbbfe", "caneh", "hbkil", "hokrh", "digwp", "bguej", "vsapi", "rqccb", "gulme", "wwoho", "t", "jqgpu", "riqcp", "jktfw", "ohmps", "tdeso", "nuojg", "itucn", "mueqd", "ktduu", "jvsnc", "eoitu", "gsriu", "ectjs", "vcktc", "qfe", "skrgq", "qiasa", "lowwq", "skfth", "iodcm", "puerl", "ddewf", "tghgk", "tmjma", "qscec", "rqmtl", "ejjsv", "holit", "djrqu", "fuvj", "tsrgw", "mwcai", "aosel", "uqcfj", "ekbai", "vpigs", "scqss", "fdvtr", "klwes", "utsdi", "vusrv", "wekn", "bhbcc", "rdmkf", "rpavm", "avmfc", "qpsgl", "huhoj", "kqmqc", "agipn", "fojbm", "winjn", "mukcb", "amkol", "upfns", "drcms", "jnamm", "koqhp", "vwotp", "iugog", "owkvk", "flope", "gqsfu", "fvv", "rjqin", "tecom", "adbqb", "epl", "qgvr", "ghkda", "kqngd", "stihr", "vlra", "fvmfl", "qqht", "pdfpg", "nwvjm", "kemma", "ebbkh", "ivaew", "jfdd", "wahek", "rstdk", "pahaa", "lnvtt", "goqci", "tsjba", "vkplr", "ibroe", "swofu", "rbsu", "ufmri", "nnnq", "ukswa", "gskvk", "lthe", "koh", "bblde", "ltbku", "tbefg", "fquti", "tfneo", "adbv", "fofms", "shpdp", "skdhd", "ethbc", "rabpe", "wotmw", "djqcg", "mbvdw", "qtvbo", "kgkw", "pwkhn", "srsfj", "pflfc", "ooekt", "ptmfl", "cihnh", "qucle", "kbbbu", "nebur", "uguw", "pkvup", "kcefv", "edbfr", "ttpig", "etlng", "spbfa", "wathj", "eavrw", "acrtk", "finbt", "jwccq", "hujsb", "lqsrt", "ojpkd", "jcbes", "igtdb", "lvmd", "uetjp", "bicdq", "hpqdu", "fmfuc", "tqokm", "rdtnf", "ljenh", "frmkb", "uakib", "owpcc", "iguvs", "wquav", "giquh", "bmsss", "holsu", "wdtvl", "lmwp", "ctdqv", "pjmqc", "dtpj", "mqiun", "qmgk", "ikkpk", "tuesk", "venjg", "alqbc", "smhtm", "nbawa", "otlvf", "cpqka", "ialwi", "ekteb", "ler", "hqid", "lisja", "eovg", "obhed", "rjwih", "jduqt", "qsglk", "tgiaa", "mbsws", "gerni", "rsuck", "igcuw", "piapp", "grml", "wlnus", "nptkv", "oros"]; | |
function obj(a, b) { | |
var obj = {}; | |
for (var i = 0; i < b.length; i++) { | |
obj[b[i].key] = b[i]; | |
} | |
for (var i = 0; i < a.length; i++) { | |
var bb = obj[a[i].key]; | |
} | |
} | |
function map(a, b) { | |
var obj = new Map(); | |
for (var i = 0; i < b.length; i++) { | |
obj.set(b[i].key, b[i]); | |
} | |
for (var i = 0; i < a.length; i++) { | |
var bb = obj.get(a[i].key); | |
} | |
} | |
function full(a, b) { | |
c: for (var i = 0; i < a.length; i++) { | |
for (var j = 0; j < b.length; j++) { | |
if (a[i].key === b[j].key) { | |
continue c; | |
} | |
} | |
} | |
} | |
function full2(a, b) { | |
var aa = new Array(a.length); | |
var bb = new Array(b.length); | |
for (var i = 0; i < a.length; i++) { | |
aa[i] = a[i].key; | |
} | |
for (var i = 0; i < b.length; i++) { | |
bb[i] = b[i].key; | |
} | |
c: for (var i = 0; i < aa.length; i++) { | |
for (var j = 0; j < bb.length; j++) { | |
if (aa[i] === bb[j]) { | |
continue c; | |
} | |
} | |
} | |
} | |
var a = []; | |
var b = []; | |
for (var i = 0; i < 100; i++) { | |
// a[i] = b[i] = {key: (1000 + i * 537).toString(33).replace(/\d+/, '')}; | |
// a[i] = b[i] = {key: (1000 + i * 537).toString(33)}; | |
var keyA = i * 17 + 1000; | |
var keyB = i * 17 + 1000 + 6734; | |
// var keyA = strings[i] | |
// var keyB = strings[i + 100]; | |
a[i] = {key: keyA}; | |
b[i] = {key: keyB}; | |
} | |
b.reverse(); | |
full([{key: 1}], {key: 1}); | |
full([{key: "2"}], {key: "2"}); | |
full([{key: 1}], {key: "1"}); | |
full([{key: "2"}], {key: 1}); | |
full([{key: ''}], {key: null}); | |
map([{key: 1}], {key: 1}); | |
map([{key: "2"}], {key: "2"}); | |
map([{key: 1}], {key: "1"}); | |
map([{key: "2"}], {key: 1}); | |
map([{key: ''}], {key: null}); | |
function abc() { | |
console.time('perf'); | |
for (var i = 0; i < 1e5; i++) { | |
// withSort(a, b); | |
full(a, b); | |
// full2(a, b); | |
// obj(a, b); | |
// map(a, b); | |
} | |
console.timeEnd('perf'); | |
} | |
abc(); | |
// 1e6 | |
// full array correlate: 1.6ms per number item comparison, 2ms per string item comparison, 3.2ms if mixed | |
// Map: array count * 100ms | |
// https://docs.google.com/spreadsheets/d/1H8ak7KftnjyJY44rLT_U0KAFK9FwODO22iPnzCzRgyM/edit?usp=sharing | |
// if mixed keys threshold 30x30, if number 60x60 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment