当数组中的值与索引相同时,代码将返回数组中的最低索引。如果没有匹配项,我应该返回-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);
}
答案 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);
}