2016-06-07 2 views
1

Я использую indexOf для поиска строки в массиве, как я могу продолжить подсчет количества вхождений? Я пробовал последний, но он не работает.Javascript: строка поиска в массиве, затем количество вхождений

var feed= new Array(); 
var feed= ["testABC", "test", "testABC"]; 

if (feed.indexOf("testABC") != -1) { 
    for (var i=0; i < feed.indexOf("testABC").length; i++) { 
     logInfo("found"+feed++); 
    } 
} 
+2

, пожалуйста, добавьте некоторые данные для 'feed'. –

+1

как насчет 'feed = [" testABC testABC "]' - два вхождения? –

+0

И '[" testABCtestABC "]' один, два или ни один? – 1983

ответ

4

Вы можете установить переменную счетчика и итерацию по элементам feed. Затем проверьте, имеет ли элемент indexOf неравномерно -1 (найденные способы) и подсчитайте наличие.

var feed = ["testABC", "test", "testABC"], 
 
    count = 0, 
 
    i; 
 

 
for (i = 0; i < feed.length; i++) { 
 
    if (feed[i].indexOf("testABC") !== -1) { 
 
     count++; 
 
    } 
 
} 
 

 
console.log(count);

4

Попробуйте использовать Array.prototype.forEach функцию:

var feed = ['foo','testABC','bar','testABC','testABC']; 
var count = 0; 
feed.forEach(function(value){ 
    if(value=='testABC') count++; 
}); 
console.log(count); //3 

Или Array.prototype.filter функцию:

var feed = ['foo','testABC','bar','testABC','testABC']; 
var count = feed.filter(function(value) { return value=='testABC' }).length; 
console.log(count); //3 
2
var numOfString = 0; 
var feed= new Array() 
var feed= ["testABC", "test", "testABC"] 

for(var i=0;i<feed.length;i++){ 
    if(feed[i] === "testABC") 
     numOfString++; 
} 
console.log(numOfString); 
1

попробовать:

var feed = ["testABC", "test", "testABC"], 
count = feed.filter(function(v) { return v.indexOf('test') > -1; }).length; 

EDIT: убрана дубликатом подача = подача. Кроме того, у меня был startWith вместо indexOf. Теперь он должен работать.

+0

Вы написали 'var feed =' дважды. Но даже исправлено это не работает. –

2

Это простое и простое решение. Вы можете сделать его функцией в случае, если вы хотите повторно использовать свой код.

var feed= new Array() 
var feed= ["testABC", "test", "testABC"] 
var count = 0 

// ensure that our array contains the key you want prior to scanning it 
if(feed.findIndex("testABC") >= 0) { 
    for (var i=0; i < feed.length; i++) { 
    if(feed[i] === "testABC") count++ 
    } 
} 

alert(count) 
2

В дополнение ко всем путям другой заявленной, если вы используете ES6 вы можете использовать «ибо» цикл для перебора всех значений в буях:

var numOfString = 0; 
var feed = ["testABC", "test", "testABC"]; 
for(let currentString of feed) { 
    if(currentString.indexOf('testABC') !== -1) { 
    numOfString += 1; 
    } 
} 
console.log(numOfString); 
2

Это может быть достигнуто с одна строка кода, используя выражение функции стрелка ES6:

var feed = ["testABC", "test", "testABC"], count = 0; 

feed.forEach((v) => v === "testABC" && count++); 

console.log(count); // 2 
+0

В чем преимущество «одной строки кода»? –

+0

@le_m, меньше код, больше результата – RomanPerekhrest

+0

нет код === менее читаемость (в данном случае) –

1

Если feed = ["testABC testABC"] считается как два вхождений «testABC», то я предлагаю следующий код:

var feed = ["testABC", "test", "testABC"]; 
 

 
var count = (feed.join('').match(/testABC/g) || []).length; 
 

 
console.log(count)

Смотрите также How to count string occurrence in string?

произвольные строки поиска должны были бы избежать специальных регулярных выражений символов.

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