Skip to main content
deleted 4 characters in body; edited title
Source Link
Jamal
  • 35.2k
  • 13
  • 134
  • 238

Find a list of objects in an array with javascriptJavaScript

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] 

demoArray = [1,2,3,4,5,6,7]
Finding Finding [3,4,5] would return 2, while looking for 60 would return -1.
The The function must allow for wrapping, so finding [6,7,1,2] would return 5

I 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 = -1 var group = [] var groupSize = 0 function 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])) // Normal console.log(findIndexOfGroup([9,1,1,5])) // Wrapping

Find a list of objects in an array with javascript

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 5

I 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 = -1 var group = [] var groupSize = 0 function 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])) // Normal console.log(findIndexOfGroup([9,1,1,5])) // Wrapping

Find a list of objects in an array with JavaScript

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 5

I 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 = -1 var group = [] var groupSize = 0 function 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])) // Normal console.log(findIndexOfGroup([9,1,1,5])) // Wrapping

Tweeted twitter.com/StackCodeReview/status/829393786803458048
Source Link

Find a list of objects in an array with javascript

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 5

I 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 = -1 var group = [] var groupSize = 0 function 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])) // Normal console.log(findIndexOfGroup([9,1,1,5])) // Wrapping