8

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);
}

3 Answers 3

9

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

Sign up to request clarification or add additional context in comments.

Comments

1

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.

2 Comments

I'm fairly sure it won't; some exits when it matches. I've added an example now to prove that.
Oh my bad. You are correct. I was fiddling with helping OP with fixing reduce and it won't break
0
for(i = 0,c=0;i < arr.length; i++ ) { 
    if(arr[i] == i) {
        c = 1;
        break; 
    }
}   
if( c == 0 ) {  
    print(c);  
} else {  
    print (i);  
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.