从数组中查找活动索引(逻辑)

时间:2015-10-01 07:22:58

标签: javascript

我很难用这个。我正在使用Javascript。

我有一个textarea,它检测@输入并将其存储在数组中。

var input = "@a @b @c" //textarea
var indexes = [1, 4, 7];

现在每个新的input我想通过查看caretPos

找出有效的索引
indexes.forEach(function(value, i){
    if (input.substr(value - 1, 1) !== '@') {
        indexes.splice(i, 1);
    }
    if (caretPos == value || caretPos > value) {
        activeIndex = value;
    }
}

我知道我错过了一张支票,但我不知道如何实施。只要您使用caretPos后退,此代码就会有效,但一旦您继续前进,它就会停止工作。

编辑:如果不清楚。如果caretPos5,则activeIndex4

1 个答案:

答案 0 :(得分:1)

看起来你正试图找到caretPos左边第一个@符号的索引 当前设置不起作用的原因是您在循环时更改索引数组。 index.splice()更改索引。当你遍历一个数组时,这是危险/不好的做法。

并且您并不需要索引数组来实现您想要的目标。

如果你这样做:

activeIndex = input.slice(0,caretpos).lastIndexOf('@') +1;

你应该得到正确的结果。

  • slice()从输入字符串中删除所有内容(不更改原始输入字符串)
  • lastIndexOf()找到@符号的最后一个符号(并添加1,因为这是您要查找的内容)。

希望这有帮助!