Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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_Jquery_Arrays - Fatal编程技术网

Javascript 使用正则表达式匹配查找数组中的元素,而不迭代数组

Javascript 使用正则表达式匹配查找数组中的元素,而不迭代数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个元素数组 ["page=4", "sortOrder=asc", "datePosted=all-time"] 使用javascript或jquery,我想找到以“sortOrder=“开头的元素的索引。我在编译时不知道这个元素的完整字符串,只知道“sortOrder=“部分 我假设这可以在不需要迭代数组并执行item.match(“sortOrder=”)的情况下完成,但可能我错了 谢谢您的帮助。如果您想在数组中查找项目,您必须对其进行迭代。如果数组的顺序是已知的(例如:按字母顺序排

我有一个元素数组

["page=4", "sortOrder=asc", "datePosted=all-time"]
使用javascript或jquery,我想找到以
“sortOrder=“
开头的元素的索引。我在编译时不知道这个元素的完整字符串,只知道
“sortOrder=“
部分

我假设这可以在不需要迭代数组并执行
item.match(“sortOrder=”)
的情况下完成,但可能我错了


谢谢您的帮助。

如果您想在数组中查找项目,您必须对其进行迭代。如果数组的顺序是已知的(例如:按字母顺序排序),那么搜索算法(例如:二叉树搜索)可以提高一些效率,但是,除非数组中有数千个项,否则它几乎不值得。在您的情况下,只需根据正则表达式在数组上循环检查每个项,并在找到匹配项时返回。

是的,您错了-您需要迭代。在ES5中,有一种新的方法来查找数组位置—
array.indexOf
,但在旧浏览器中不支持这种方法,它需要精确匹配而不是部分匹配。

遗憾的是,indexOf中没有部分匹配。。。试试这个,看看是否有帮助:

Array.prototype.MatchInArray = function (value) {

    var i;

    for (i=0; i < this.length; i++) {

        if (this[i].match(value)) {

           return i;

       }

   }

   return -1;

};
Array.prototype.MatchInArray=函数(值){
var i;
对于(i=0;i
来自ES6的新函数使您可以做您想做的事情,使用正则表达式而不是迭代数组

这里有一个如何实现的示例:

完整代码示例:

const arr = ["page=4", "sortOrder=asc", "datePosted=all-time"];
const str = "sortOrder";

function isStringInArray(str, arr) {

  if (arr.findIndex(_strCheck) === -1) return false;

  return true;

  function _strCheck(el) {

    return el.match(str);
  }
}

console.log(isStringInArray(str, arr));

如果要在与特定正则表达式匹配的数组中获取

…要仅获取第一个匹配的值,可以使用

…要获得所有匹配结果的数组,可以使用

…要获取第一个匹配的索引,可以使用


如果您没有使用ES6,这里有一个建议。

您确实需要在某个点上迭代数组。不管它是否由一个框架抽象,它仍然需要发生。啊,好的,是的,我看到了
Array.IndexOf
,我想知道除了部分匹配之外是否有类似的东西。考虑到返回索引(<代码> i>代码>)或<代码> -1 (如果没有找到),因为这提供了更多的信息,并且与<>代码>数组。谢谢@zamnuts!。
const array = ["page=4", "sortOrder=asc", "datePosted=all-time", "sortOrder=desc"];
const match = array.find(value => /^sortOrder=/.test(value));
// match = "sortOrder=asc"
const array = ["page=4", "sortOrder=asc", "datePosted=all-time", "sortOrder=desc"];
const matches = array.filter(value => /^sortOrder=/.test(value));
// matches = ['sortOrder=asc', 'sortOrder=desc'];
const array = ["page=4", "sortOrder=asc", "datePosted=all-time", "sortOrder=desc"];
const index = array.findIndex(value => /^sortOrder=/.test(value));
// index = 1;