2016-11-10 48 views
-2

如何在匹配模式的内容中返回索引数组。如何检查阵列的模式?

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

注:字母不必是按照这个顺序。

+1

你能告诉我们什么你到目前为止尝试过吗? – evolutionxbox

+0

当你尝试在'[“大是蝙蝠”,“猫很小”]''找到'at'时会发生什么。它们都包含'at' – brk

+0

@ user2181397 - 由于这两个项目至少包含一次所需的字母,因此OP会期望“[0,1]”。 – evolutionxbox

回答

0

使用Array#forEachArray#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; 
 
}

+1

谢谢你帮我回答我的问题。另外,非常感谢你解释它。我试图学习JavaScript和报价真的帮助我这一点。再次感谢:) – ForeverStuck

0

您可以使用Array.prototype.reduceArray.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"));

+1

谢谢你的时间帮助我解决这个问题。它真的很感激 – ForeverStuck