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;