我试图在数组中找到序列的长度,在第一个和第二个特定数字之间。
例如: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]
发布于 2016-10-10 11:14:21
indexOf
不像你想的那样做。它返回它用提供的值找到的第一个项的索引。对于数组中的两个值,它返回第一个索引。
由于您只需要索引,并且已经在使用循环迭代索引,所以只需使用i
本身:
indexes.push(i);
发布于 2016-10-10 11:45:59
你可以这样做,但不知道为什么是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));
发布于 2016-10-10 12:48:16
您可以只使用索引,并返回最后一个索引元素与第一个加一个索引元素之间的差异。
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
https://stackoverflow.com/questions/39965165
复制相似问题