patternjavascriptMinor
Find a list of objects in an array with JavaScript
Viewed 0 times
objectsarraywithjavascriptfindlist
Problem
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:
Finding
I have a current working solution, but I'd like to know if it could be optimized in any way.
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 = -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 = arr.length){
return idx - arr.length
}
return idx
}
console.log(findIndexOfGroup([4,3,10])) // Normal
console.log(findIndexOfGroup([9,1,1,5])) // WrappingSolution
You could first get the index of the first element of the search array.
Then loop while
Return
If not get a new index with
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])); // 2
console.log(find([6, 7, 1, 2], [1, 2, 3, 4, 5, 6, 7])); // 5
console.log(find([60], [1, 2, 3, 4, 5, 6, 7])); // -1
console.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; }Context
StackExchange Code Review Q#154804, answer score: 6
Revisions (0)
No revisions yet.