Javascript:检查字符串是否包含字符,然后删除部分字符串?

时间:2016-01-30 10:25:00

标签: javascript string character contains intervals

这个函数本质上应该做的是从输入文本中获取单词列表,并从下拉菜单中以客户端选择的间隔(WPM)将其设置在显示器上。

如果函数中传递的单词包含问号,句号,冒号,分号,感叹号或逗号,则将其删除,并且所选的间隔加倍。例如,如果单词之间的延迟是117毫秒,那么它将是234毫秒。

我最难解决您确定传递的单词是否包含标点符号并将其删除的部分。

我收到错误: 未捕获的类型错误:无法读取属性' indexOf'未定义的。

我不确定为什么会发生这种情况,因为list[index++]StringindexOf是Javascript中的字符串方法,而不是属性。

我也不确定如何实施延迟。鉴于我已经以这种方式使用setInterval()(我只能使用setInterval来实现此目的)我不确定如何设置String显示两次,同时还包括延迟。

function runDisplay(data, id) {
        var reader = document.getElementById(id);
        var index = 0;
        if (timer) {
            clearInterval(timer);
        }
        if (data.length) {
            timer = setInterval(function() {


            var punctuation = [".", ",", ":", ";", "!", "?"];
            var textSpeed = 117; // default
            for (var j = 0; j < punctuation.length; j++) {
                // remove punctuation if found and double text delay
                // if multiple found, remove only one
                if (!(data[index++].indexOf(punctuation[j]) === -1)) {
                    data[index++] = string.replace(punctuation[j], '');
                // set data[index++] to display twice to double delay?
                }
            } 



            reader.innerHTML = data[index++];
            index = index % data.length;
          }, textSpeed);
        }
    }

3 个答案:

答案 0 :(得分:1)

index++每次调用时都会增加索引变量,并且在循环体中调用它两次。 在if (!(data[index++].indexOf(punctuation[j]) === -1)) {索引中,我可以说{i}和data[index++] = string.replace(punctuation[j], '');中的i + 1。

答案 1 :(得分:1)

  

我收到错误:未捕获类型错误:无法读取属性   &#39;的indexOf&#39;未定义的。

     

我不确定为什么会这样,因为list [index ++]是一个String和   indexOf是Javascript中的字符串方法,而不是属性。

首先,方法也是对象的属性。

其次,JS引擎告诉您,您正在indexOf上调用undefined,因此它不是字符串。并且data[index++]未定义,因为index可能不是data数组范围内的索引。

该函数的主要问题是,如果data是一个单词数组,则不要在其上正确迭代。您每次在阅读数组时都需要递增indexindex每次显示时只应增加一次。

  

我也不确定如何实施延迟。鉴于我,我   以这种方式使用setInterval()(我只能使用setInterval   这个目的)我不确定如何设置字符串   显示两次,同时还包括延迟。

如果函数必须在无限循环中显示所有单词(这是index = index % data.length的目的,对吧?),可以在传递给当前的匿名函数内调用clearInterval和另一个setInterval setInterval,允许计算你想要的textSpeed。

答案 2 :(得分:1)

代码很乱,但我希望你想要的......有点:

public function setEmaileAttribute($value) {
    if ( empty($value) ) { // will check for empty string
    $this->attributes['company'] = NULL;
    } else {
        $this->attributes['company'] = $value;
    }
}

只需将其粘贴到Chrome控制台即可进行测试。