💾arr.containsSubarray()

Drawing
when calling array.containsSubarray(), this === array
// 🔸 arr.containsSubarray()
Array.prototype.containsSubarray = function(subarray, orderIsRelevant=false) {
    
    // ⭐ closure with internal parameter `i`
    const valueIsInArraySequentially = (i => v => i = this.indexOf(v, i) + 1)(0);
    
    const valueIsInArray = (v => this.includes(v));
    const valuePassedTest = orderIsRelevant ? valueIsInArraySequentially : valueIsInArray;
    return subarray.every(valuePassedTest);
};
  • valueIsInArraySequentially is equivalent to:

// closure (with internal variable `startFromIndex`)
const valueInArraySequentially = (()=>{
    // internal variable in clusure
    let startFromIndex = 0;
    // when calling `array.containsSubarray()`, `this === array`
    return (value) => startFromIndex = this.indexOf(value, startFromIndex) + 1;
})();

Last updated

Was this helpful?