Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Test If The Array Index Equals The Array Value

The code is to return the lowest index in an array when the value in the array is the same as the index. If there are no matches i should return -1. For example:

indexEqualsValue([-8,0,2,5])
output: 2 //array[2] == 2

indexEqualsValue([-1,0,3,6])
output: -1  //no matches

The code works when there are no matches or if the length of the array is zero, but not at other times. I think the problem is the first condition in my if statement. I don't necessarily want an answer, more tips on what I should check/rewrite.

Thanks!

function indexEqualsValue(a) {
    return a.reduce((acc, currV, currI) => {
      if (currI === currV) {
        return currV;
      }
      return -1;
  }, 0);
}
like image 360
Valerie Avatar asked Aug 17 '18 12:08

Valerie


Video Answer


2 Answers

You could just find the index with Array#findIndex.

const indexEqualsValue = array => array.findIndex((v, i) => v === i);

console.log(indexEqualsValue([-8, 0, 2, 5])); //  2
console.log(indexEqualsValue([-1, 0, 3, 6])); // -1
like image 72
Nina Scholz Avatar answered Sep 27 '22 22:09

Nina Scholz


some exits when it matches, so you can use it to quickly find what you need:

const indexEqualsValue = array => {
  let match;
  
  const didMatch = array.some((v, i) => {
    match = i;
    return v === i;
  })
  
  return didMatch ? match : -1;
}

console.log(indexEqualsValue([-8,0,2,5]))
console.log(indexEqualsValue([-8,0,2,5,0]))
console.log(indexEqualsValue([-1,0,3,6]))

nina-scholz's answer is better, the only advantage of using some over findIndex is that some is supported in ie whereas it seems findIndex is not.

like image 33
OliverRadini Avatar answered Sep 27 '22 22:09

OliverRadini