Javascript:在数组中搜索字符串然后计算出现次数

时间:2016-06-07 18:34:01

标签: javascript arrays

我正在使用indexOf搜索数组中的字符串,如何继续计算出现次数?我尝试了后者,但它没有工作。

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++);
    }
} 

9 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);

答案 2 :(得分: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);

答案 3 :(得分:2)

尝试:

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

编辑:删除重复Feed = Feed。 另外,我有startsWith而不是indexOf。它现在应该工作。

答案 4 :(得分: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)

答案 5 :(得分:2)

除了对方所说的所有方式之外,如果你使用的是ES6,你可以使用'for of'循环来迭代所有数组的值:

SELECT activity.item_id as course_id,
  postmeta.meta_value as quiz_data
FROM wp_bp_activity as activity
JOIN wp_postmeta as postmeta
  ON postmeta.post_id = activity.secondary_item_id
WHERE activity.type = 'quiz_evaluated'
  AND concat('quiz_questions',activity.user_id )= postmeta.meta_key

答案 6 :(得分:2)

可以使用ES6箭头函数表达式使用一行代码来实现:

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

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

console.log(count);  // 2

答案 7 :(得分: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?

任意搜索字符串都需要转义为特殊的正则表达式字符。

答案 8 :(得分:0)

您还可以使用regular expressionsString.prototype.match()

代码:

const feed = ["testABC", "test", "testABC"];
const count = feed.toString().match(/testABC/g).length;

console.log(count)