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

end*_*hin 7 javascript arrays jquery

我有一系列元素

["page=4", "sortOrder=asc", "datePosted=all-time"]
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的帮助.

pmr*_*ule 15

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

...只获得第一个匹配的,你可以使用find()

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

...要获取所有匹配结果的数组,可以使用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'];
Run Code Online (Sandbox Code Playgroud)

...要获取第一个匹配的索引,可以使用findIndex()

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

如果您没有使用ES6,这是ES5中的代码.


Yëc*_*ëco 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;

};
Run Code Online (Sandbox Code Playgroud)

  • 考虑返回索引(`i`)或`-1`(如果没有找到),因为这提供了更多的信息并与`Array.indexOf相提并论 (3认同)