如何在匹配模式的内容中返回索引数组。如何检查阵列的模式?
var contents = ["Dog is big","Cat is small","Horse is huge"]
(contents,"og") //returns [0,2]
(contents,"at") //returns [1]
(contents,"..") //etc
所以,“O”和“G”都在0和2,但不是在1
注:字母不必是按照这个顺序。
如何在匹配模式的内容中返回索引数组。如何检查阵列的模式?
var contents = ["Dog is big","Cat is small","Horse is huge"]
(contents,"og") //returns [0,2]
(contents,"at") //returns [1]
(contents,"..") //etc
所以,“O”和“G”都在0和2,但不是在1
注:字母不必是按照这个顺序。
使用Array#forEach
和Array#every
方法。
var contents = ["Dog is big", "Cat is small", "Horse is huge"]
console.log(get(contents, "og"));
console.log(get(contents, "at"));
console.log(get(contents, ".."));
function get(arr, str) {
// array for storing result
var res = [];
// iterate over string array
arr.forEach(function(v, i) {
// split string into individual character and
// check for each for match
// if all elements matched push the element
if (str.split('').every(function(v1) {
return v.indexOf(v1) > -1;
}))
res.push(i);
});
return res;
}
谢谢你帮我回答我的问题。另外,非常感谢你解释它。我试图学习JavaScript和报价真的帮助我这一点。再次感谢:) – ForeverStuck
您可以使用Array.prototype.reduce
和Array.prototype.every
过滤掉其中指数符合您的标准 - 看演示如下:
var contents = ["Dog is big","Cat is small","Horse is huge"];
function filter(filter) {
var f = filter.split('');
return contents.reduce(function(p,c,i){
f.every(e=>~c.indexOf(e)) && p.push(i);
return p;
},[]);
}
console.log(filter("og"));
console.log(filter("at"));
谢谢你的时间帮助我解决这个问题。它真的很感激 – ForeverStuck
你能告诉我们什么你到目前为止尝试过吗? – evolutionxbox
当你尝试在'[“大是蝙蝠”,“猫很小”]''找到'at'时会发生什么。它们都包含'at' – brk
@ user2181397 - 由于这两个项目至少包含一次所需的字母,因此OP会期望“[0,1]”。 – evolutionxbox