我试图在指定数字的第一次和第二次出现之间找到数组中序列的长度。
例如:lengthOfSequence([0, -3, 7, 4, 0, 3, 7, 9], 7)
将返回5,因为数字7的第一个和第二个出现之间有5个索引。
我觉得我编写的代码应该可以工作,但是在控制台日志记录之后,看起来好像我的arr.push()
方法只是将第一个索引推送到我的索引数组变量,并将其推送两次。为什么会发生这种情况?
这是我的上下文代码:
var lengthOfSequence = function (arr, n) {
var indexes = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] === n) {
indexes.push(arr.indexOf(arr[i]));
}
}
return arr.indexOf(indexes[1]) - arr.indexOf(indexes[0]);
}
所以,例如,如果我使用我之前使用过的lengthOfSequence([0, -3, 7, 4, 0, 3, 7, 9], 7)
数组,我的for循环会找到第一个出现的7(索引2)并将其推送到我的索引数组变量,但它只是做两次。所以我的索引数组只是[2,2]
。为什么不是[2,6]
?
答案 0 :(得分:2)
indexOf
没有按照您的想法行事。它返回使用提供的值找到的 first 项的索引。对于数组中的两个值,它返回第一个索引。
由于您只需要索引并且已经使用循环迭代它,因此您只需使用i
本身:
indexes.push(i);
答案 1 :(得分:1)
您可以按照以下方式进行,但不知道为什么它是您想要的5。我想它应该是4.好吧让它成为5。
function lengthOfSequence(a,f){
var fi = a.indexOf(f);
return a.slice(fi)
.indexOf(f)+(2*fi+1);
}
var a = [0, -3, 7, 4, 0, 3, 7, 9],
f = 7;
console.log(lengthOfSequence(a,f));
&#13;
答案 2 :(得分:0)
您可以只使用索引并返回索引的最后一个元素与第一个元素加一个之间的差异。
var lengthOfSequence = function(arr, n) {
var indexes = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] === n) {
indexes.push(i);
}
}
return indexes[indexes.length - 1] - indexes[0] + 1;
}
console.log(lengthOfSequence([0, -3, 7, 4, 0, 3, 7, 9], 7)); // 5
console.log(lengthOfSequence([0, -3, 7, 4, 0, 3, 7, 9], -3)); // 1