最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Test If The Array Index Equals The Array Value - Stack Overflow

programmeradmin2浏览0评论

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

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);
}
Share Improve this question edited Sep 5, 2018 at 10:33 shokha 3,1994 gold badges27 silver badges38 bronze badges asked Aug 17, 2018 at 12:02 ValerieValerie 1111 silver badge8 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 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

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.

for(i = 0,c=0;i < arr.length; i++ ) { 
    if(arr[i] == i) {
        c = 1;
        break; 
    }
}   
if( c == 0 ) {  
    print(c);  
} else {  
    print (i);  
}
发布评论

评论列表(0)

  1. 暂无评论