我有一系列元素
["page=4", "sortOrder=asc", "datePosted=all-time"]
使用javascript或jquery我想找到以"sortOrder="
开头的元素的索引。我不会在编译时知道这个元素的完整字符串,只是"sortOrder="
部分。
我假设这可以在不需要迭代数组并执行item.match("sortOrder=")
的情况下完成,但也许我错了。
感谢您的帮助。
答案 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
但是在旧版浏览器中不支持这种情况,它需要完全匹配而不是部分匹配。