测试数组索引是否等于数组值

时间:2018-08-17 12:02:34

标签: javascript arrays undefined reduce

当数组中的值与索引相同时,代码将返回数组中的最低索引。如果没有匹配项,我应该返回-1。例如:

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

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

当没有匹配项或数组的长度为零但在其他时间不起作用时,该代码将起作用。我认为问题是if语句中的第一个条件。我不一定想要答案,更多关于应该检查/重写的提示。

谢谢!

function indexEqualsValue(a) {
    return a.reduce((acc, currV, currI) => {
      if (currI === currV) {
        return currV;
      }
      return -1;
  }, 0);
}

3 个答案:

答案 0 :(得分:9)

您可以只用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

答案 1 :(得分:1)

some在匹配时退出,因此您可以使用它快速找到所需的内容:

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的答案更好,与some相比,使用findIndex的唯一优势是支持some,而似乎不支持findIndex

答案 2 :(得分: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);  
}