Having an array of objects, such as numbers, what would be the most optimal (Memory and CPU efficiency) way if finding a sub group of objects?As an example:demoArray = [1,2,3,4,5,6,7]Finding [3,4,5] would return 2, while looking for 60 would return -1. The function must allow for wrapping, so finding [6,7,1,2] would return 5I have a current working solution, but I'd like to know if it could be optimized in any way.var arr = [  1,  5,2,6,8,2,  3,4,3,10,9,  1,5,7,10,3,  5,6,2,3,8,  9,1]var idx = -1var group = []var groupSize = 0function findIndexOfGroup(g){  group = g  groupSize = g.length  var beginIndex = -2    while(beginIndex === -2){    beginIndex = get()  }    return beginIndex}function get(){    idx = arr.indexOf(group[0], idx+1);        if(idx === -1 || groupSize === 1){      return idx;    }    var prevIdx = idx        for(var i = 1; i < groupSize; i++){      idx++            if(arr[getIdx(idx)] !== group[i]){        idx = prevIdx        break      }            if(i === groupSize - 1){        return idx - groupSize + 1      }    }    return -2}function getIdx(idx){  if(idx >= arr.length){    return idx - arr.length  }  return idx}console.log(findIndexOfGroup([4,3,10])) // Normalconsole.log(findIndexOfGroup([9,1,1,5])) // Wrapping
Find a list of objects in an array with JavaScript
javascript;array
You could first get the index of the first element of the search array.Then loop while index !== -1 and check all elements in the search array with the elements in the base array. For checking outside of the range of the array use the reminder operator %.Return index if all elements are equal.If not get a new index with indexOf and an incremented start value.Array#every breaks the iteration if the callback returns false.function find(search, array) {    var index = array.indexOf(search[0]);    while (index !== -1) {        if (search.every(function (a, i) { return a === array[(index + i) % array.length]; })) {            return index;        }        index = array.indexOf(search[0], index + 1);    }    return -1;}console.log(find([3, 4, 5], [1, 2, 3, 4, 5, 6, 7]));          //  2console.log(find([6, 7, 1, 2], [1, 2, 3, 4, 5, 6, 7]));       //  5console.log(find([60], [1, 2, 3, 4, 5, 6, 7]));               // -1console.log(find([3, 4, 5], [1, 2, 3, 4, 6, 7, 3, 4, 5, 9])); //  6.as-console-wrapper { max-height: 100% !important; top: 0; }