首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >试图在数组中查找序列长度的问题

试图在数组中查找序列长度的问题
EN

Stack Overflow用户
提问于 2016-10-10 19:10:23
回答 3查看 61关注 0票数 1

我试图在数组中找到序列的长度,在第一个和第二个特定数字之间。

例如:lengthOfSequence([0, -3, 7, 4, 0, 3, 7, 9], 7)将返回5,因为在数字7的第一次出现和第二次出现之间有5个索引。

我觉得我编写的代码应该可以工作,但是在控制台日志记录之后,我的arr.push()方法似乎只将第一个索引推到了索引数组变量,并将它推了两次。为什么会发生这种事?

以下是我的上下文代码:

代码语言:javascript
代码运行次数:0
运行
复制
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]

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-10 19:14:21

indexOf不像你想的那样做。它返回它用提供的值找到的第一个项的索引。对于数组中的两个值,它返回第一个索引。

由于您只需要索引,并且已经在使用循环迭代索引,所以只需使用i本身:

代码语言:javascript
代码运行次数:0
运行
复制
indexes.push(i);
票数 2
EN

Stack Overflow用户

发布于 2016-10-10 19:45:59

你可以这样做,但不知道为什么是5,你想要。我想应该是4。好的,让我们把它定为5。

代码语言:javascript
代码运行次数:0
运行
复制
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));

票数 1
EN

Stack Overflow用户

发布于 2016-10-10 20:48:16

您可以只使用索引,并返回最后一个索引元素与第一个加一个索引元素之间的差异。

代码语言:javascript
代码运行次数: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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39965165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档