Array Difference Filter vs Map (v3)

Revision 3 of this benchmark created on


Setup

var one = [34218, 8003, 42558, 6245, 63161, 21426, 57604, 55397, 33179, 43775, 24120, 38404, 71190, 26633, 27046, 78964, 36166, 13059, 31574, 32957, 94278, 74097, 56469, 98735, 44711, 53490, 58610, 38159, 77809, 42388, 54745, 83588, 83529, 37116, 44836, 69540, 85474, 68945, 8842, 19492, 56623, 80000, 3446, 58185, 22740, 91582, 39224, 51869, 16154, 37048, 70895, 94289, 46573, 82096, 40285, 77452, 58962, 84065, 5, 11784, 62727, 39001, 82845, 89650, 84758, 1794, 55184, 51791, 26043, 68405, 96363, 48357, 93657, 83456, 92377, 11654, 55964, 85127, 20374, 48140, 58251, 20247, 90515, 93982, 31931, 22980, 66675, 1197, 23643, 28943, 78464, 48690, 9982, 30127, 29004, 92061, 78658, 80360, 70917, 435, 39162, 56688, 87830, 43913, 67318, 19073, 7723, 21376, 85800, 50115, 58950, 82874, 56741, 80819, 9215, 15348, 25719, 63808, 95402, 513, 26613, 23041, 16771, 13076, 4551, 88622, 14811, 95378, 16282, 10665, 53857, 84005, 96425, 24367, 61938, 25364, 67262, 50539, 41885, 94335, 47135, 12574, 25559, 85360, 40285, 89797, 45188, 67076, 52158, 4563, 66189, 99833, 36071, 15725, 43650, 38356, 3350, 50003, 55459, 84590, 66832, 8167, 31842, 15807, 70741, 45080, 94679, 28589, 49468, 52192, 77388, 42764, 24127, 82311, 22331, 42862, 44423, 36423, 51965, 94973, 22995, 12817, 87693, 70325, 3611, 84688, 23282, 44246, 9859, 11361, 63702, 65282, 97012, 74602, 5666, 19839, 30992, 46494, 42094, 9532, 84041, 44811, 38226, 90122, 25065, 36703, 24194, 56811, 61549, 57530, 12390, 37062, 76431, 65370, 3844, 69752, 95954, 65235, 12230, 7053, 73390, 12597, 59474, 68153, 79877, 24491, 63270, 76038, 37719, 74788, 87305, 25998, 40327, 85241, 56262, 19570, 36778, 93306, 64340, 15367, 29312, 43462, 4355, 86417, 7136, 97131, 69010, 93192, 78132, 17971, 80966, 79084, 61452, 85186, 13572, 703, 83633, 25829, 71646, 81959, 64751, 60941, 1077, 38942, 80148, 43503, 32680, 99549, 94773, 71288, 31097, 1862, 16544, 76316, 70222, 13502, 41282, 59584, 50987, 10542, 68542, 43531, 16184, 98984, 68145, 13658, 85360, 69605, 26477, 52813, 11783, 33580, 75207, 1883, 89984, 37173, 50620, 99876, 42746, 60571, 37183, 27664, 10215, 26119, 54419, 85171, 73491, 93430, 1608, 81156, 99703, 92757, 70292, 98775, 83994, 69499, 2150, 18470, 21267, 89674, 6056, 6220, 37287, 61703, 52259, 34989, 90208, 87085, 89500, 86388, 77112, 61648, 64365, 40730, 18011, 18245, 23186, 89711, 74815, 50431, 95880, 77287, 98192, 13799, 50746, 50467, 43464, 91629, 36489, 72471, 28985, 22550, 69334, 80795, 4220, 67782, 56696, 10541, 34256, 46944, 31301, 48653, 30147, 68918, 681, 73992, 27, 17995, 79862, 65234, 5617, 4906, 43758, 41869, 81382, 68608, 52666, 70067, 10212, 97092, 93278, 70556, 79062, 73393, 62500, 51113, 70180, 87630, 40944, 6351, 95831, 91493, 51293, 24422, 2238, 80004, 23301, 35558, 73194, 65560, 40826, 83889, 24670, 65672, 93870, 60543, 20080, 32644, 93947, 88876, 61278, 86959, 14668, 92978, 52462, 63056, 17677, 94683, 19081, 17916, 73203, 46791, 93746, 75835, 25878, 79205, 10111, 1720, 83319, 70998, 68247, 37793, 64898, 65119, 31015, 13501, 36641, 13729, 2325, 52144, 43977, 28663, 54070, 39070, 61800, 75839, 69884, 44472, 23303, 68470, 66813, 141, 14779, 12252, 56346, 44895, 47907, 85772, 12383, 32291, 73738, 37565, 32583, 62304, 63062, 72988, 37027, 10659, 85973, 23262, 84378, 82599, 64812, 85835, 89818, 12487, 76453, 17597, 80, 4827, 93898, 71206, 97939, 97396, 92628, 85237, 17844, 6782, 42868, 5160, 28417, 99982, 84984, 4622, 13783, 57063, 38597, 86307, 9589, 90802, 53711, 422, 52901, 94460, 35574, 20420, 27961, 22598, 23014, 26346, 6751, 74811, 93750, 58407, 30839, 83791, 7779, 64658, 23564, 49248, 96941, 61221, 54912, 18895, 67254, 66488, 68107, 37088, 4331, 44966, 36831, 27310, 69473, 44762, 71223, 81538, 38329, 27380, 49749, 67602, 19360, 10373, 20206, 45062, 99588, 64582, 5371, 75638, 58188, 60281, 19109, 12855, 1934, 91038, 84366, 76012, 75503, 8475, 95037, 94202, 41340, 339, 67124, 84439, 59924, 72156, 14299, 5644, 70338, 63129, 21368, 98147, 92175, 46078, 49604, 5132, 53449, 34728, 82620, 86595, 58813, 3523, 65480, 3724, 78217, 26424, 37628, 42520, 55938, 40599, 86942, 4346, 22995, 8515, 14580, 9498, 69690, 82413, 532, 73861, 1077, 51299, 14079, 22099, 46926, 99068, 78190, 1667, 21616, 66988, 51985, 50859, 2221, 68794, 34344, 60634, 83016, 59359, 33600, 75508, 85023, 42090, 32561, 18179, 34557, 7733, 46866, 43940, 46144, 68905, 70134, 75542, 51111, 75367, 23230, 60534, 84202, 62703, 72469, 70113];
    
    var two = [73861, 76038, 75542, 15807, 17844, 43503, 16771, 36703, 62727, 38356, 58188, 71223, 3844, 94202, 18895, 21376, 65235, 37628, 40285, 74788, 7053, 13799, 42862, 22598, 43977, 72988, 21267, 4827, 92757, 52813, 97396, 77112, 75367, 44836, 36423, 33580, 23564, 49749, 56741, 55459, 24367, 28943, 25878, 39224, 37088, 65370, 10373, 10541, 82620, 12817, 44246, 3350, 339, 61452, 68945, 25998, 44811, 47135, 25719, 63062, 27046, 18011, 16184, 28417, 61800, 32583, 23262, 82599, 59584, 70222, 70180, 96363, 56623, 42520, 19839, 1934, 31015, 51299, 34256, 39162, 55964, 97131, 4220, 44762, 23301, 27380, 34344, 85186, 40826, 44472, 26613, 5666, 71206, 34218, 67782, 69499, 78964, 99876, 50987, 83319, 73390, 56469, 78217, 85800, 23303, 11783, 56696, 12230, 69334, 66189, 87630, 20080, 43775, 91582, 70134, 43464, 85474, 91493, 94460, 85023, 49468, 53490, 1077, 43940, 13572, 67262, 27961, 64582, 10542, 83588, 69752, 2221, 14811, 9532, 76431, 13658, 83456, 3611, 56811, 36831, 93750, 72471, 52144, 79877, 11361, 29004, 69884, 51791, 68470, 33179, 82874, 23282, 6751, 12487, 62500, 73194, 21368, 51985, 63161, 19360, 85360, 98147, 50746, 66675, 95880, 46573, 63702, 19109, 10665, 42094, 81382, 94773, 64340, 41869, 80795, 69540, 67076, 89711, 95378, 91038, 95037, 23186, 56688, 3724, 9215, 28589, 68405, 19073, 90208, 4355, 5132, 43531, 48690, 23041, 98775, 85171, 84041, 52192, 30992, 94973, 74815, 92978, 37287, 40730, 61703, 52158, 80966, 68905, 23014, 4906, 1197, 26633, 22740, 61648, 6351, 435, 14299, 80000, 48653, 17916, 84439, 60634, 31574, 16154, 24670, 65234, 50859, 34728, 85835, 68145, 16544, 89500, 1720, 30147, 42558, 46944, 17995, 63270, 44711, 24422, 86388, 83016, 65560, 58185, 41340, 16282, 9498, 70067, 46866, 85772, 87305, 37062, 51869, 7733, 83791, 58813, 98735, 51965, 12252, 29312, 60571, 5644, 38597, 86307, 92175, 90802, 7779, 1608, 57063, 34557, 57530, 50539, 81959, 79205, 4563, 75508, 41885, 58950, 81538, 94335, 84984, 37027, 9982, 14779, 58407, 42868, 89797, 84378, 27664, 50003, 77809, 14668, 99068, 86595, 86959, 27310, 23643, 78190, 39001, 28663, 64658, 62703, 13059, 20247, 13502, 10212, 52901, 38404, 87693, 1862, 5, 56262, 22995, 66832, 53449, 79862, 49248, 15348, 68542, 42388, 79084, 26424, 98984, 85237, 9859, 18179, 63808, 52666, 22099, 41282, 5617, 28985, 58251, 92628, 70917, 95954, 80819, 14580, 77287, 67602, 69690, 96425, 35574, 43913, 82096, 6782, 55184, 75835, 65119, 75503, 32680, 422, 73992, 7723, 89984, 40599, 71646, 10215, 7136, 46078, 36489, 84065, 2150, 64365, 80, 25364, 12383, 36166, 4622, 12390, 78132, 681, 50431, 80004, 59924, 36641, 74097, 49604, 4346, 92377, 96941, 18470, 95831, 51293, 61549, 54912, 40327, 32561, 31301, 34989, 69010, 22980, 43758, 44966, 93746, 22550, 70292, 76012, 24120, 8003, 37116, 94679, 8475, 42764, 89818, 60281, 67254, 23230, 37173, 59359, 47907, 69473, 19492, 53711, 83633, 64812, 94289, 85973, 85241, 75207, 84590, 98192, 61278, 17677, 94278, 26043, 31097, 93657, 95402, 37793, 50467, 40944, 90122, 5371, 4551, 30127, 66813, 4331, 11784, 43650, 25559, 83529, 97939, 79062, 93306, 61221, 64751, 10111, 26346, 99833, 22331, 36778, 703, 24491, 51111, 20374, 48357, 6245, 93278, 85360, 82413, 44895, 30839, 93982, 60534, 70998, 26119, 84202, 81156, 35558, 27, 76453, 1794, 2325, 89650, 88622, 71288, 1667, 3523, 44423, 68918, 70741, 70556, 99549, 65672, 54745, 72156, 12597, 8515, 67318, 14079, 75638, 8842, 1883, 69605, 48140, 38226, 55938, 42746, 50115, 54419, 20420, 26477, 32291, 42090, 11654, 84005, 84688, 33600, 99703, 82311, 22995, 32644, 24194, 37565, 99588, 6056, 24127, 2238, 87085, 83889, 78464, 55397, 31842, 45062, 46791, 86417, 56346, 43462, 58610, 9589, 66988, 59474, 45080, 12574, 37183, 19570, 74811, 77452, 50620, 68794, 75839, 88876, 38942, 60941, 68247, 68107, 3446, 5160, 73203, 93430];
    
    function diffIter(a, b) {
      return a.filter(function(value) {
         return b.indexOf(value) == -1;
      });
    }
    
    function diffIter2(a, b) {
      var result = [];
      var length = a.length;
      for (var i = 0; i < length; ++i) {
         if (b.indexOf(a[i]) == -1) {
           result.push(a[i]);
         }
      }
      return result;
    }
    
    function diffMap(a, b) {
      var length = a.length;
      var map = {};
      for (var i = 0; i < length; ++i) {
        map[a[i]] = true;
      }
      length = b.length;
      for (var i = 0; i < length; ++i) {
        delete map[b[i]];
      }
      return Object.keys(map);
    }
    
    
    function diffMap2(a, b) {
      var map = {};
      var length = b.length;
      for (var i = 0; i < length; ++i) {
        map[b[i]] = true;
      }
      return a.filter(function(value) { return !map[value] });
    }
    
    
    function diffMap3(a, b) {
      var result = [];
      var map = {};
      var length = b.length;
      for (var i = 0; i < length; ++i) {
        map[b[i]] = true;
      }
      length = a.length;
      for (var i = 0; i < length; ++i) {
        if (!map[a[i]]) {
          result.push(a[i]);
        }
      }
      return result;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Iter
diffIter(one,two);
diffIter(two,one);
ready
Map
diffMap(one,two);
diffMap(two,one);
ready
Map 2
diffMap2(one,two);
diffMap2(two,one);
ready
Map 3
diffMap3(one,two);
diffMap3(two,one);
ready
Iter 2
diffIter2(one,two);
diffIter2(two,one);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.