HTML Preparation code:
x
 
1
2
<script src='https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js'></script>
3
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
Script Preparation code:
 
function getRandomInt(max) {
  return Math.floor(Math.random() * max);
}
var itemsA = [];
var itemsB = [];
for (let i = 0; i < 1000; i++) {
  itemsA.push(getRandomInt(500));
  itemsB.push(getRandomInt(500));
}
itemsA.sort(function(a,b){ return a-b; });
itemsB.sort(function(a,b){ return a-b; });
function* sortedDifference(sortedIterableA, sortedIterableB) {
    let iteratorA = sortedIterableA[Symbol.iterator]();
    let iteratorB = sortedIterableB[Symbol.iterator]();
    let itemA = iteratorA.next();
    let itemB = iteratorB.next();
    while (!itemA.done) {
        if (itemB.done) {
            yield itemA.value;
            yield* iteratorA;
            return;
        }
        if (itemA.value < itemB.value) {
            yield itemA.value;
            itemA = iteratorA.next();
        } else {
            if (! (itemB.value < itemA.value)) {
                itemA = iteratorA.next();
            }
            itemB = iteratorB.next();
        }
    }
}
function difference(setA, setB) {
    let _difference = new Set(setA)
    for (let elem of setB) {
        _difference.delete(elem)
    }
    return Array.from(_difference).sort();
}
Tests:
  • Port from C++ STL

     
    let itemsC = Array.from(sortedDifference(itemsA, itemsB));
  • Difference algorithm from MDN Set page

     
    let itemsC = difference(itemsA, itemsB);
  • Lodash _.difference

     
    let itemsC = _.difference(itemsA, itemsB);
  • Ramda R.difference

     
    let itemsC = R.difference(itemsA, itemsB);
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Port from C++ STL
    Difference algorithm from MDN Set page
    Lodash _.difference
    Ramda R.difference

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 3 years ago)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Safari/605.1.15
Safari 14 on Mac OS X 10.14.6
View result in a separate tab
Test name Executions per second
Port from C++ STL 26032.7 Ops/sec
Difference algorithm from MDN Set page 5871.6 Ops/sec
Lodash _.difference 18179.0 Ops/sec
Ramda R.difference 3092.5 Ops/sec