我在jQuery中有一个数组,需要计算该数组中“true”字符串的数量,并将“numOfTrue”变量设置为真字符串的数量。因此,在下面的数组中,有2个“true”字符串,因此numOfTrue等于2。
var numOfTrue;
var Answers = [ "true", "false", "false", "true", "false" ];
我不确定如何在jQuery中遍历数组以计算字符串。或者循环甚至是必要的吗?
真实字符串的数量可能从1到5个不等。
我在jQuery中有一个数组,需要计算该数组中“true”字符串的数量,并将“numOfTrue”变量设置为真字符串的数量。因此,在下面的数组中,有2个“true”字符串,因此numOfTrue等于2。
var numOfTrue;
var Answers = [ "true", "false", "false", "true", "false" ];
我不确定如何在jQuery中遍历数组以计算字符串。或者循环甚至是必要的吗?
真实字符串的数量可能从1到5个不等。
使用基本的、老式的循环:
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);
或者一个筛选器
var numOfTrue = Answers.filter(x => x === "true").length;
你不需要使用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
。这将处理一个术语可能是另一个子字符串的情况(即数组包含“true”和“truest”,您只想计算确切的字符串“true”)。正则表达式演示:http://regexpal.com/?flags=gm®ex=(%3F%3A%2C%7C%5E)true(%3F%3A%2C%7C%24)&input=true%2Cfalse%0Atrue%2Cfalse%2Ctruest%2Ctrue%0Afalse%2Ctrue%2Cfalse - craigpatik虽然这种方法可能不是很高效,但您可以使用过滤器,然后使用grep函数进行计数:
var num = jQuery.grep(Answers, function (a) { return a == "true"; }).length;
for
循环或each
循环高效,但我喜欢你将其精简至一行的方式: )。顺便说一句,如果jQuery有一个reduce
方法,你就可以创建一个高效的一行代码... - Justin EthierAnswers.filter(function(v){ return v === "true"; }).length;
- Justin Ethier.filter
不兼容IE 8. :( http://kangax.github.com/es5-compat-table/ - Selvakumar Arumugamfor
循环。 - Justin Ethiervar numOfTrue = Answers.filter(function(item){ return item === "true"; }).length
true
,则此项将在返回的数组中。然后,您可以获取此数组的长度(["true","true"]
数组的长度为2
)。
reduce函数:
var numOfTrue = Answers.reduce(function(counter, item){ return counter + (item === "true" ? 1 : 0); }, 0);
Reduce函数需要回调函数,以便对数组中的每个项执行操作。数组项作为第二个参数提供,第一个参数是先前执行的回调函数的返回值。Reduce函数的第二个参数是初始值,用于第一个回调函数。如果您省略此参数,则会提供数组的第一项(在本例中,如果您忘记将0
添加为第二个参数,则结果值将是"true0010"
字符串,因为您将连接字符串而不是添加数字)。
filter
和reduce
在旧的浏览器中不起作用,例如IE 8或更低版本。不过可以考虑使用JQuery的grep
选项。 - Pascal Lindelauf您还可以使用正则表达式和String.prototype.match()
代码:
const Answers = [ "true", "false", "false", "true", "false" ];
const count = Answers.toString().match(/true/g).length;
console.log(count)
arr = [true,true,true,false,false]
n = arr.join('').split("true").length-1
var numOfTrue = 0;
for(var i = 0, len = Answers.length;i < len; i++){
if(Answers[i] === "true"){
numOfTrue++;
}
}
jQuery
。 - ShankarSangolivar numOfTrue =0;
$.each(Answers,function(index,value){
if(value =="true")
{
numOfTrue++;
}
});
$.each(Answers, ...)
。 - Selvakumar Arumugam$.each
并投了赞成票..尽管它最初是不正确的。 - Selvakumar Arumugam===
而不是==
。 - Justin Ethiervar numOfTrue;
var Answers = [ "true", "false", "false", "true", "false" ];
$.each(Answers, function(i, item) {
if (item == "true")
numOfTrue++;
});
JavaScript 的等效语句是:
var numOfTrue;
var Answers = [ "true", "false", "false", "true", "false" ];
for (var i = 0; i < Answers.length; i++) {
if (answers[i] == "true")
numOfTrue++;
});
var numOfTrue;
var Answers = [ "true", "false", "false", "true", "false" ];
var i = 0;
$.each(Answers, function(index, value){
if(value == "true")
{
i++;
}
});
alert(i);
.each()
来循环,.filter()
或.map()
则可以更加函数化。 但是你真的需要使用jQuery吗? - nicosantangelo