计算数组中字符串的实例

Liv*_*i17 15 javascript jquery

我在jQuery中有一个数组,我需要计算该数组中"true"字符串的数量,然后使"numOfTrue"变量等于真实字符串的数量.因此在下面的数组中,有2个"true"字符串,因此numOfTrue将等于2.

var numOfTrue;
var Answers = [ "true", "false", "false", "true", "false" ];
Run Code Online (Sandbox Code Playgroud)

我不知道如何在jQuery中循环遍历数组来计算字符串.或者甚至是必要的循环?

真实字符串的数量可以在1到5之间的任何位置变化.

Jam*_*iec 38

使用基本的老式循环:

var numOfTrue = 0;
for(var i=0;i<Answers.length;i++){
    if(Answers[i] === "true")
       numOfTrue++;
}
Run Code Online (Sandbox Code Playgroud)

或者,a reduce

var numOfTrue = Answers.reduce(function(p,c){
    if(c === "true")
       p++;
    return p;
},0);
Run Code Online (Sandbox Code Playgroud)

或者a filter

var numOfTrue = Answers.filter(function(x){ return x === "true"; }).length;
Run Code Online (Sandbox Code Playgroud)

  • 如果您要查找已经知道的值,这很好,但是如果数组中有多个随机项会发生什么? (2认同)
  • @CodedContainer 那么你有一个与此不同的问题;) (2认同)

Sel*_*gam 11

你不需要这个jQuery ..一个像下面这样简单的for循环就可以了,

var numOfTrue = 0;
var Answers = [ "true", "false", "false", "true", "false" ];

for (var i = 0; i < Answers.length; i++) {
    if (Answers[i] === "true") { //increment if true
      numOfTrue++; 
    }
}
Run Code Online (Sandbox Code Playgroud)

甚至没有循环,DEMO

Answers.toString().match(/true/g).length
Run Code Online (Sandbox Code Playgroud)

  • 更通用的解决方案是 `Answers.join(',').match(/(?:,|^)true(?:,|$)/g).length`。这将处理一个术语可能是另一个术语的子字符串的情况(即数组同时包含“true”和“trues”,并且您只想计算确切的字符串“true”)。正则表达式演示:http://regexpal.com/?flags=gm®ex=(%3F%3A%2C%7C%5E)true(%3F%3A%2C%7C%24)&amp;input=true%2Cfalse%0Atrue%2Cfalse %2Ctrue%2Ctrue%0Afalse%2Ctrue%2Cfalse (2认同)

Sam*_*ich 7

它可能不是那么性能友好,但你可以使用过滤,然后使用grep计数:

var num = jQuery.grep(Answers, function (a) { return a == "true"; }).length;
Run Code Online (Sandbox Code Playgroud)

  • @Samich - 也可以在纯JavaScript中执行此操作:`Answers.filter(function(v){return v ==="true";}}.length;` (2认同)

Mar*_*ski 7

你不需要jQuery来完成这项任务.只是简单的Javascript.最好的答案由Jamiec提供,你也可以使用过滤器减少可用于阵列的功能.

过滤功能:

var numOfTrue = Answers.filter(function(item){ return item === "true"; }).length
Run Code Online (Sandbox Code Playgroud)

在这里,您将为数组中的每个项目提供回调函数.如果此函数返回,true则此项将在返回的数组中.然后你得到这个数组的长度(["true", "true"]数组的长度是2)

减少功能:

var numOfTrue = Answers.reduce(function(counter, item){ return counter + (item === "true" ? 1 : 0); }, 0);
Run Code Online (Sandbox Code Playgroud)

Reduce函数需要为数组中的每个项执行的回调函数.数组项作为第二个参数提供,第一个参数是先前执行的回调的返回值.reduce函数的第二个参数是为第一个回调函数提供的初始值.如果你省略了这个,那么就提供了数组中的第一项(在这个例子中,如果你忘记添加0第二个参数,那么结果值将是"true0010"字符串,因为不是添加数字而是连接蜇)