JS: For loop vs Array.indexOf (v285)

Revision 285 of this benchmark created on


Description

Testing speed of a standard for loop vs. Array.indexOf.

Preparation HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src="http://www.larocarange.com/data.js"></script>

<script>
var ar = dataSet.data.is.i;
                var ar2 = dataSet2.data.is.i;
        var toSearch = '|15711|';
                var toSearch2 = '|168312|';
        var searchLen = toSearch.length;
                var searchLen2 = toSearch2.length;
        var results = [];</script>

Test runner

Ready to run.

Testing in
TestOps/sec
For loop with substr
results = [];
for (var i = 0; i < ar.length; i++) {
  var item = ar[i];
  var itemLen = item['s'].length;
  for (var k = 0; k < itemLen; k++) {
    if (itemLen - k < searchLen) {
      break;
    }
    if (item['s'].substr(k, searchLen) === toSearch) {
      results.push(item);
      break;
    }
  }
}
ready
other for-loop with substr
results = [];
for (var i = 0, n = ar.length; i < n; i++) {
  var item = ar[i];
  var itemLen = item['s'].length;
  for (var k = 0, m = itemLen - searchLen; k <= m; k++) {
    if (item['s'].substr(k, searchLen) === toSearch) {
      results.push(item);
      break;
    }
  }
}
ready
indexOf with push
 results = [];
 for (var i = 0; i < ar.length; i++) {
   var item = ar[i];
   if (item['s'].indexOf(toSearch) >= 0) {
     results.push(item);
   }
 }
ready
IndexOf with Direct with length
 results = [];
 for (var i = 0; i < ar.length; i++) {
   var item = ar[i];
   if (item['s'].indexOf(toSearch) >= 0) {
     results[results.length] = item;
   }
 }
ready
other for-loop with substring
results = [];
for (var i = 0, n = ar.length; i < n; i++) {
  var item = ar[i];
  var itemLen = item['s'].length;
  for (var k = 0, m = itemLen - searchLen; k <= m; k++) {
    if (item['s'].substring(k, searchLen + k) === toSearch) {
      results.push(item);
      break;
    }
  }
}
ready
other for-loop w IndexOf with Direct with length
results = [];
for (var i = 0, n = ar.length; i < n; i++) {
  var item = ar[i];
  if (item['s'].indexOf(toSearch) >= 0) {
    results[results.length] = item;
  }
}
ready
other for-loop w IndexOf with Direct with length Diff Ary
results = [];
for (var i = 0, n = ar2.length; i < n; i++) {
  if (ar2[i].indexOf(toSearch2) !== -1) {
    results[results.length] = ar2[i];
  }
}
ready

Revisions

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