2016-11-10 2 views
-2

Как вернуть массив индексов в содержимое, соответствующее шаблону.Как проверить массив на шаблоны?

var contents = ["Dog is big","Cat is small","Horse is huge"] 

(contents,"og") //returns [0,2] 
(contents,"at") //returns [1] 
(contents,"..") //etc 

Итак, «о» и «г» оба в 0 и 2, но не в 1.

примечание: буквы не должны быть в таком порядке.

+1

Можете ли вы показать нам, что вы уже пробовали? – evolutionxbox

+0

Что произойдет, когда вы попытаетесь найти 'at' в' ["big is bat", "Cat is small"] '. Оба они содержат 'at' – brk

+0

@ user2181397 - OP ожидает' [0,1] ', поскольку оба элемента содержат требуемые буквы хотя бы один раз. – evolutionxbox

ответ

0

Использование 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; 
 
}

+1

спасибо, что помогли мне ответить на мой вопрос. Плюс, спасибо за объяснение. Я пытаюсь изучить javascript, и цитаты действительно помогают мне в этом. Еще раз спасибо :) – ForeverStuck

0

Вы можете использовать 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"));

+1

благодарим вас за то, что помог мне разобраться. Его действительно оценили – ForeverStuck

Смежные вопросы