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

时间:2011-08-12 10:05:40

标签: javascript jquery arrays

我有一系列元素

["page=4", "sortOrder=asc", "datePosted=all-time"]

使用javascript或jquery我想找到以"sortOrder="开头的元素的索引。我不会在编译时知道这个元素的完整字符串,只是"sortOrder="部分。

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

感谢您的帮助。

5 个答案:

答案 0 :(得分:12)

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

...要获得第一场比赛的,您可以使用find()

const array = ["page=4", "sortOrder=asc", "datePosted=all-time", "sortOrder=desc"];
const match = array.find(value => /^sortOrder=/.test(value));
// match = "sortOrder=asc"

...要获得所有匹配结果的数组,您可以使用filter()

const array = ["page=4", "sortOrder=asc", "datePosted=all-time", "sortOrder=desc"];
const matches = array.filter(value => /^sortOrder=/.test(value));
// matches = ['sortOrder=asc', 'sortOrder=desc'];

...要获得第一场比赛的索引,您可以使用findIndex()

const array = ["page=4", "sortOrder=asc", "datePosted=all-time", "sortOrder=desc"];
const index = array.findIndex(value => /^sortOrder=/.test(value));
// index = 1;

如果你没有使用ES6,这里是the code in ES5

答案 1 :(得分:5)

可悲的是,indexOf中没有部分匹配...尝试这一点,看看是否有帮助:

Array.prototype.MatchInArray = function (value) {

    var i;

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

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

           return i;

       }

   }

   return -1;

};

答案 2 :(得分:1)

如果要在数组中查找项目,则必须迭代它。如果你的数组是已知的顺序(例如:它是按字母顺序排序的),那么你可以在搜索算法中建立一些效率(例如:二叉树搜索),但是除非你在数组中有数千个项目,否则很难值得拥有。在你的情况下,只需循环遍历数组,检查每个项目与你的正则表达式,并在找到匹配时返回。

答案 3 :(得分:1)

ES6中的新Array.findIndex函数可以执行您想要的操作,使用正则表达式而不是迭代数组。

这里有一个如何完成的示例:https://jsbin.com/qemeseyeme/edit?js,console

完整代码示例:

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));

答案 4 :(得分:-2)

是的,你错了 - 你需要迭代。在ES5中,有一种新方法可以找到数组位置 - Array.indexOf但是在旧版浏览器中不支持这种情况,它需要完全匹配而不是部分匹配。