计算数组中字符串的实例

IT技术 javascript jquery
2021-03-17 11:01:44

我在 jQuery 中有一个数组,我需要计算该数组中“真”字符串的数量,然后使“numOfTrue”变量等于真字符串的数量。所以在下面的数组中,有 2 个“真”字符串,所以 numOfTrue 将等于 2。

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

我不确定如何在 jQuery 中循环遍历数组来计算字符串。或者甚至需要循环?

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

6个回答

使用基本的老式循环:

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

或者,一个 reduce

var numOfTrue = Answers.reduce((acc,curr) => {
    if(curr === "true")
       acc++;
    return acc;
},0);

filter

var numOfTrue = Answers.filter(x => x === "true").length;
如果您要查找已经知道的值,这很好,但是如果数组中有多个随机项会发生什么?
2021-04-22 11:01:44
@CodedContainer 那么你有一个不同的问题;)
2021-04-24 11:01:44

为此,您不需要 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++; 
    }
}

甚至没有循环,DEMO

Answers.toString().match(/true/g).length
更通用的解决方案是Answers.join(',').match(/(?:,|^)true(?:,|$)/g).length. 这将处理一个术语可能是另一个术语的子字符串的情况(即数组包含“真”和“最真”,而您只想计算确切的字符串“真”)。正则表达式演示:regexpal.com/...
2021-05-14 11:01:44

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

var num = jQuery.grep(Answers, function (a) { return a == "true"; }).length;
@SKS - 很高兴知道,谢谢。无论如何,这更像是一种好奇心 - 最好的解决方案是只使用for循环。
2021-04-26 11:01:44
@JustinEthier FYI.filter与 IE 8 不兼容。:( kangax.github.com/es5-compat-table
2021-05-12 11:01:44
不像for循环或那样有效each,但我喜欢你如何将它减少到 1 行 :)。FWIW 如果 jQuery 有一种reduce方法,您可能能够创建一个高效的单行...
2021-05-13 11:01:44
@Samich - 也可以在纯 JavaScript 中执行此操作: Answers.filter(function(v){ return v === "true"; }).length;
2021-05-20 11:01:44

您不需要 jQuery 来完成此任务。只是普通的Javascript。Jamiec给出了最佳答案,您还可以使用可用于数组的filterreduce函数。

过滤功能:

var numOfTrue = Answers.filter(function(item){ return item === "true"; }).length

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

减少功能:

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

Reduce 函数需要为数组中的每个项目执行的回调函数。数组项作为第二个参数提供,第一个是先前执行的回调的返回值。reduce 函数的第二个参数是为第一个回调函数提供的初始值。如果省略此项,则提供数组中的第一项(在此示例中,如果您忘记添加0作为第二个参数,则结果值将是"true0010"字符串,因为您将连接字符串而不是添加数字)

我像一个内胆,但要小心:filterreduce不工作在旧的浏览器,如IE 8或以下。不过,可以考虑使用 JQuery 的grep选项。
2021-05-12 11:01:44

您还可以使用正则表达式String.prototype.match()

代码:

const Answers = [ "true", "false", "false", "true", "false" ];
const count = Answers.toString().match(/true/g).length;

console.log(count)