2015-11-23 2 views
0

У меня есть эта функция: яваскриптаЧастичное совпадение строки в JavaScript

var y; 
y = ['ab', 'f', 'c'].indexOf('b') 

Это возвращает -1, потому что б не полный матч против аб В JavaScript, что это самый простой способ смотреть на частичное совпадение.

Так что я хочу:

y = ['ab', 'f', 'c'].indexOf('b') 

вернуться 0 (индекс первого элемента, потому что он нашел частичное совпадение при сравнении б к аЬ

Я понимаю, я не могу сделать это с помощью IndexOf , что является лучшим способом сделать это?

ответ

1

Вы должны перебрать массива:

var arr = ['ab', 'f', 'c'] 
 

 
function find(a, c) { 
 
    for(var i = 0; i < a.length; ++i) { 
 
    if(a[i].indexOf(c) != -1) 
 
     return i 
 
    } 
 
    
 
    return -1 
 
} 
 

 
// Example: 
 
document.body.innerHTML = find(arr, "b")

1

У вас есть несколько способов, вы можете использовать метод Array.prototype.filter:

var testRegex = /b/; 
var result = ['ab','f','c'].map(function(item, index) { 
     return testRegex.test(item) ? index : null; //return index in the array if found. 
}).filter(function(index) { 
    return index !== null; // filter the result and remove all results that are null; 
}); 

результат должен быть равен [0];

если вы пытаетесь с массивом, как это:

['ab', 'cgt', 'abcd', 'cd', 'efb']; 

Она должна возвращать:

[0, 2, 4] 
1

С ES6 Array.prototype.findIndex и стрелка функций:

y = ['ab', 'f', 'c']; 
y.findIndex(el => el.indexOf('b') > -1); //0 
+0

не findIndex возвращают только первый индекс найден? или, если быть более точным: как насчет массива вроде этого: ['b', 'ab', 'bc']? не то, что его задают в вопросе, просто любопытно. еще не работал с большей частью es6-funcs – Dominik

+0

Он вернет только первый индекс. – MinusFour

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