Script Preparation code:
x
 
const shuffleArray = array => {
    const arr = [...array];
    for (let i = arr.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        const temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    return arr;
}
var testArr = Array.from({
    length: 5000
}, () => Math.floor(Math.random() * 4000));
var scrambled = shuffleArray(testArr);
Tests:
  • sort manual idx

     
    scrambled.sort((a,b) => {
      let idx1, idx2;
      for (let i = 0; i < testArr.length;i++) {
        if (testArr[i] === a) {
          idx1 = i
          if (idx2 != null) break
        } else if (testArr[i] === b) {
          idx2 = i
          if (idx1 != null) break
        }
      }
      return idx1 - idx2
    });
  • sort findindex

     
    scrambled.sort((a,b) => testArr.findIndex(t => t === a) - testArr.findIndex(t => t === b));
  • map find

     
    testArr.map((t) => scrambled.find(s => s === t));
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    sort manual idx
    sort findindex
    map find

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 2 years ago)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
Chrome 109 on Mac OS X 10.15.7
View result in a separate tab
Test name Executions per second
sort manual idx 0.3 Ops/sec
sort findindex 58.0 Ops/sec
map find 59.9 Ops/sec