2016-11-10 16 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 - 両方の項目に少なくとも1回は希望の文字が含まれているので、OPは' [0,1] 'を期待します。 – evolutionxbox

答えて

0

Array#forEachおよびの方法を使用する。

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

関連する問題