Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
标识为字符串是javascript中另一个较长字符串的子字符串_Javascript - Fatal编程技术网

标识为字符串是javascript中另一个较长字符串的子字符串

标识为字符串是javascript中另一个较长字符串的子字符串,javascript,Javascript,我正在尝试在我的页面上实现搜索功能。默认情况下,页面将加载项目列表。我在表上方实现了一个搜索框,单击“搜索”按钮后,表将仅重新加载与搜索字符串一起应用的值 我有listofstring([]),它是表中所有条目的列表,而searchString是用户将在搜索框中输入的内容。因此,逻辑应该是ListOfstring中所有以searchString作为子字符串的条目都应该显示出来。我正在实现如下逻辑: <form> <input type="text" ng-model="

我正在尝试在我的页面上实现搜索功能。默认情况下,页面将加载项目列表。我在表上方实现了一个搜索框,单击“搜索”按钮后,表将仅重新加载与搜索字符串一起应用的值

我有listofstring([]),它是表中所有条目的列表,而searchString是用户将在搜索框中输入的内容。因此,逻辑应该是ListOfstring中所有以searchString作为子字符串的条目都应该显示出来。我正在实现如下逻辑:

<form>
    <input type="text" ng-model="searchString">
    <input type="button" value="Search Text" ng-click="reloadTable()">
</form>

var reloadTable = function()
{
    for (var i = 0; i < ListOfStrings.Length; i++)
    {
        if ((searchString) && (ListOfStrings[i].indexOf(searchString) != -1)) 
        {                         
            ListToDisplay.push(ListOfStrings[i]);
        }
    }
}

var reloadTable=函数()
{
对于(var i=0;i
但是我有以下问题,

  • 显然,我的搜索条件不区分大小写。列表字符串都是大写的。因此,除非searchString也是大写的,否则if的大小写就不起作用了。那么,如何实现不区分大小写的逻辑呢

  • 我想要的另一个功能是,如果在搜索一次后,用户清除searchString并单击search按钮,则应显示整个列表。但是,在我的代码中,如果在UI中清除了searchString,它的值仍然会被读取为null以外的值(我猜),这会影响填充ListToDisplay。没有任何内容被推送到列表中显示。如何实现该功能

  • 任何帮助都将不胜感激

  • 在比较之前,将所有内容转换为相同的大小写
  • 我认为你需要分享更多的相关代码;到目前为止,您所分享的只是用于比较

  • 您已经说过您的列表都是大写的,所以在循环之前,只需将
    searchString
    转换为大写:

    searchString = searchString.toUpperCase();
    
    输入字段的值永远不会为
    null
    ,但可以是空字符串(
    “”
    )。因此,对于空字符串,只需复制整个列表,而不是循环:

    searchString = searchString.toUpperCase();
    if (searchString === "") {
      ListToDisplay = ListOfStrings;
      // or ListToDisplay = ListOfStrings.slice(); if you want to take a copy
    } else {
      ListToDisplay = [];
      for (var i = 0; i < ListOfStrings.length; i++) {
        if (ListOfStrings[i].indexOf(searchString) != -1) {
          ListToDisplay.push(ListOfStrings[i]);
        }
      }
    }
    
    searchString = searchString.toUpperCase();
    ListToDisplay = !searchString ? ListOfStrings : ListOfStrings.filter(function(el) {
        return el.indexOf(searchString) != -1;
    });