我需要计算一下特征的发生次数。
例如,我方言中载有:
var mainStr = "str1,str2,str3,str4";
我想找到对应的编号:,
nature,即3。 而且,在 com一带分裂之后,个人扼杀计数为4。
我还必须证实,每一条插图,即方言1或方言2或方言3或方言4不应超过15个特性。
我需要计算一下特征的发生次数。
例如,我方言中载有:
var mainStr = "str1,str2,str3,str4";
我想找到对应的编号:,
nature,即3。 而且,在 com一带分裂之后,个人扼杀计数为4。
我还必须证实,每一条插图,即方言1或方言2或方言3或方言4不应超过15个特性。
我更新了这一答案。 我赞成更好地使用对应办法的想法,但进展缓慢:
console.log(("str1,str2,str3,str4".match(/,/g) || []).length); //logs 3
console.log(("str1,str2,str3,str4".match(new RegExp("str", "g")) || []).length); //logs 4
如果你知道你正在事先寻找什么,如果你不能够使用<代码>RegExp的构造,并在<代码>g上作为论据通过,则使用固定字句。
no>>>>>。
我在2009年所作的原始答复如下。 它不必要地创造了一个阵列,但使用分裂的速度更快(截至2014年9月)。 如果我真的需要加快速度,我不会怀疑我会使用一种分裂,但我更喜欢使用对应办法。
旧答案(从2009年起):
如果你回顾一下 com:
(mainStr.split(",").length - 1) //3
如果你回顾一下,
(mainStr.split("str").length - 1) //4
在“Los”回答中和在我自己的sil中,的分部分都以速进行,至少是在 Chrome,但又一次造成外围阵似乎起步。
至少有五个途径。 最好的选择也是最快的选择(由本地的RegEx发动机提供)。
("this is foo bar".match(/o/g)||[]).length;
// returns 2
"this is foo bar".split("o").length - 1;
// returns 2
由于饥饿是资源,因此没有建议。 它为每次配送新的阿雷拉病例。 Don ttries it for a >100MB file through fileReader. 您可使用观察准确的资源使用情况。 Chrome 简介()。
var stringsearch = "o"
,str = "this is foo bar";
for(var count=-1,index=-2; index != -1; count++,index=str.indexOf(stringsearch,index+1) );
// returns 2
寻求单一特性
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
// returns 2
内容测绘和过滤。 这不是因为其资源预先分配,而没有使用沙捞越发电机。
var str = "this is foo bar"
str.split( ).map( function(e,i){ if(e === o ) return i;} )
.filter(Boolean)
//>[9, 10]
[9, 10].length
// returns 2
Share: I made this gist, with currently 8 methods of character-counting, so we can directly pool and share our ideas - just for fun, and perhaps some interesting benchmarks :)
添加这一功能,对原型进行筛选:
String.prototype.count=function(c) {
var result = 0, i = 0;
for(i;i<this.length;i++)if(this[i]==c)result++;
return result;
};
使用:
console.log("strings".count("s")); //2
简而言之,使用split,以找出在扼杀中发生特性的次数。
mainStr.split( , ).length
// gives 4 which is the number of strings after splitting using delimiter comma
mainStr.split( , ).length - 1
// gives 3 which is the count of comma
快速 谷歌/a>查询结果(从)。 http://www.codex.com/wiki/index.php? entitled=Count_the_ number_of_occurrences_of_a_specific_character_in_a_string#Javagust
String.prototype.count=function(s1) {
return (this.length - this.replace(new RegExp(s1,"g"), ).length) / s1.length;
}
如此:
test = one,two,three,four
commas = test.count( , ) // returns 3
www.un.org/Depts/DGACM/index_spanish.htm 这可能是简单的,但并非最快。 见下文基准。
令人惊讶的是,13年来,这一答案没有显示出来。 理论上,它似乎最快:
const s = "The quick brown fox jumps over the lazy dog.";
const oCount = s.length - s.replaceAll( o , ).length;
如果在扼杀中只存在两种特性,则速度更快:
const s = "001101001";
const oneCount = s.replaceAll( 0 , ).length;
http://www.ohchr.org。
const { performance } = require( node:perf_hooks );
const ITERATIONS = 10000000;
const TEST_STRING = "The quick brown fox jumps over the lazy dog.";
console.log(ITERATIONS, "iterations");
let sum = 0; // make sure compiler doesn t optimize code out
let start = performance.now();
for (let i = 0; i < ITERATIONS; ++i) {
sum += TEST_STRING.length - TEST_STRING.replaceAll( o , ).length;
}
let end = performance.now();
console.log(" replaceAll duration", end - start, `(sum ${sum})`);
sum = 0;
start = performance.now();
for (let i = 0; i < ITERATIONS; ++i) {
sum += TEST_STRING.split( o ).length - 1
}
end = performance.now();
console.log(" split duration", end - start, `(sum ${sum})`);
10000 iterations
replaceAll duration 2.6167500019073486 (sum 40000)
split duration 2.0777920186519623 (sum 40000)
100000 iterations
replaceAll duration 17.563208997249603 (sum 400000)
split duration 8.087624996900558 (sum 400000)
1000000 iterations
replaceAll duration 128.71587499976158 (sum 4000000)
split duration 64.15841698646545 (sum 4000000)
10000000 iterations
replaceAll duration 1223.3415840268135 (sum 40000000)
split duration 629.1629169881344 (sum 40000000)
const mainStr = str1,str2,str3,str4 ;
const commas = [...mainStr].filter(l => l === , ).length;
console.log(commas);
或
const mainStr = str1,str2,str3,str4 ;
const commas = [...mainStr].reduce((a, c) => c === , ? ++a : a, 0);
console.log(commas);
这里是一个类似的解决办法,但它使用<代码>Array.prototype.reduce。
function countCharacters(char, string) {
return string.split( ).reduce((acc, ch) => ch === char ? acc + 1: acc, 0)
}
正如有人提到的那样,. >。
ok, reg, reg, reg, 或许不会很快,但很短,可以读到, 而在我的情况下,则只有:
key.replace(/[^_]/g, ).length
just remove everything that does not look like your char but it does not look nice with a string as input
我发现,在非常大的范围内(即1 000个特性,例如)寻找特性的最佳办法是使用<代码>replace()。
window.count_replace = function (str, schar) {
return str.length - str.replace(RegExp(schar), ).length;
};
参看,yet another JSPerfripe to test this means as well as other methods ofFinding a nature in a string。
Split诉Rep
var i = 0;
var split_start = new Date().getTime();
while (i < 30000) {
"1234,453,123,324".split(",").length -1;
i++;
}
var split_end = new Date().getTime();
var split_time = split_end - split_start;
i= 0;
var reg_start = new Date().getTime();
while (i < 30000) {
("1234,453,123,324".match(/,/g) || []).length;
i++;
}
var reg_end = new Date().getTime();
var reg_time = reg_end - reg_start;
alert ( Split Execution time: + split_time + "
" + RegExp Execution time: + reg_time + "
");
<>>>>> 06/10/2022
因此,我进行了各种旁证测试,如果你使用案例允许的话,使用分裂似乎将达到最佳的总体效果。
function countChar(char: string, string: string): number {
return string.split(char).length - 1
}
countChar( x , foo x bar x baz x )
我知道我很晚才来到这里,但我很抱歉,没有人以最基本的方法回答这个问题。 社区就这一问题提供的答复中,很大一部分是循环利用,但所有的答复都以无法真正高效的老办法转移。
在处理包含数千个特性的大型扼杀时,为了达到发生时的计数,可能变得非常不相干,更不用提一条密码。 以下解决办法利用了<代码>slice 、indexOf
和可信赖的传统while
。 这些办法阻止我们走过每一个特点,并将大大加快时间。 这些逻辑与你在需要铺路的教区和法体分析器中发现的相似。
使用切片
在这一方法中,我们正在利用<代码>slice和每个<代码>indexOf。 相应地,我们将通过扼杀和消除先前搜索的po。 每一次我们打电话indexOf
。 搜查范围将缩小。
function countChar (char: string, search: string): number {
let num: number = 0;
let str: string = search;
let pos: number = str.indexOf(char);
while(pos > -1) {
str = str.slice(pos + 1);
pos = str.indexOf(char);
num++;
}
return num;
}
// Call the function
countChar( x , foo x bar x baz x ) // 3
www.un.org/Depts/DGACM/index_spanish.htm 采用职位索引
与使用<代码>slice的第一种方法类似,但我们在检索该方法时,将利用<条码>的参数,即
function countChar (char: string, str: string): number {
let num: number = 0;
let pos: number = str.indexOf(char);
while(pos > -1) {
pos = str.indexOf(char, pos + 1);
num++;
}
return num;
}
// Call the function
countChar( x , foo x bar x baz x ) // 3
从个人角度讲,我首先采取第二种做法,但两者在处理大街时都是罚款和效劳的,但规模也较小。
我对已接受的答复稍加改进,因此可以检查对案件敏感/对案件敏感的对等,并且是一种与扼杀目标相关的方法:
String.prototype.count = function(lit, cis) {
var m = this.toString().match(new RegExp(lit, ((cis) ? "gi" : "g")));
return (m != null) ? m.length : 0;
}
lit
is the string to search for ( such as ex ), and cis is case-insensitivity, defaulted to false, it will allow for choice of case insensitive matches.
I love StackOverflow.com
for the lower-case letter o
, you would use:
var amount_of_os = I love StackOverflow.com .count( o );
amount_of_os
would be equal to 2
.
var amount_of_os = I love StackOverflow.com .count( o , true);
时间:amount_of_os
等于3
,因为从星号中提取的资本代码
1. 最容易发现......
例
str = mississippi ;
function find_occurences(str, char_to_count){
return str.split(char_to_count).length - 1;
}
find_occurences(str, i ) //outputs 4
这就是我的解决办法。 在我前面已经张贴了一些解决办法。 但我很想在这里谈谈我的看法。
const mainStr = str1,str2,str3,str4 ;
const commaAndStringCounter = (str) => {
const commas = [...str].filter(letter => letter === , ).length;
const numOfStr = str.split( , ).length;
return `Commas: ${commas}, String: ${numOfStr}`;
}
// Run the code
console.log(commaAndStringCounter(mainStr)); // Output: Commas: 3, String: 4
我刚刚在
www.un.org/Depts/DGACM/index_spanish.htm 一些代码: www.un.org/Depts/DGACM/index_spanish.htm 几项成果:: Update 2021-Feb-10:固定打字。 页: 1 <>Restrong>Update 20-Oct-24: 还是Node.js 12一案(此处与它一起讨论)。// winner!
function charCount1(s, c) {
let count = 0;
c = c.charAt(0); // we save some time here
for(let i = 0; i < s.length; ++i) {
if(c === s.charAt(i)) {
++count;
}
}
return count;
}
function charCount2(s, c) {
return (s.match(new RegExp(c[0], g )) || []).length;
}
function charCount3(s, c) {
let count = 0;
for(ch of s) {
if(c === ch) {
++count;
}
}
return count;
}
function perfIt() {
const s = Hello, World! ;
const c = o ;
console.time( charCount1 );
for(let i = 0; i < 10000; i++) {
charCount1(s, c);
}
console.timeEnd( charCount1 );
console.time( charCount2 );
for(let i = 0; i < 10000; i++) {
charCount2(s, c);
}
console.timeEnd( charCount2 );
console.time( charCount3 );
for(let i = 0; i < 10000; i++) {
charCount2(s, c);
}
console.timeEnd( charCount3 );
}
perfIt()
charCount1: 3.301ms
charCount2: 11.652ms
charCount3: 174.043ms
undefined
perfIt()
charCount1: 2.110ms
charCount2: 11.931ms
charCount3: 177.743ms
undefined
perfIt()
charCount1: 2.074ms
charCount2: 11.738ms
charCount3: 152.611ms
undefined
perfIt()
charCount1: 2.076ms
charCount2: 11.685ms
charCount3: 154.757ms
undefined
s = dir/dir/dir/dir/
for(i=l=0;i<s.length;i++)
if(s[i] == / )
l++
我正致力于一个小型项目,需要一个分级的反响。 寻找错误的短语给我没有结果,不过,在撰写我自己的执行情况之后,我对这个问题 st。 不管怎么说,这是我的方法,它可能比这里大多数人要慢,但可能对某人有帮助:
function count_letters() {
var counter = 0;
for (var i = 0; i < input.length; i++) {
var index_of_sub = input.indexOf(input_letter, i);
if (index_of_sub > -1) {
counter++;
i = index_of_sub;
}
}
请让我知道,你是否发现这种执行失败或不遵守某些标准!
UPDATE You may want to substitute:
for (var i = 0; i < input.length; i++) {
原文:
for (var i = 0, input_length = input.length; i < input_length; i++) {
Interesting read discussing the above: http://www.erichynds.com/blog/javascript-length-property-is-a-stored-value
说明。
例:
var str = "hellow how is life"; var len = str.split("h").length-1; will give count 2 for character "h" in the above string;
www.un.org/Depts/DGACM/index_spanish.htm 最快的方法似乎是通过指数操作者:。
function charOccurances (str, char)
{
for (var c = 0, i = 0, len = str.length; i < len; ++i)
{
if (str[i] == char)
{
++c;
}
}
return c;
}
console.log( charOccurances( example/path/script.js , / ) ); // 2
www.un.org/spanish/ecosoc 或作为原型的功能:>
String.prototype.charOccurances = function (char)
{
for (var c = 0, i = 0, len = this.length; i < len; ++i)
{
if (this[i] == char)
{
++c;
}
}
return c;
}
console.log( example/path/script.js .charOccurances( / ) ); // 2
function len(text,char){
return text.innerText.split(string).length
}
console.log(len("str1,str2,str3,str4",","))
这是一个非常短的职能。
String.prototype.reduce = Array.prototype.reduce;
String.prototype.count = function(c) {
return this.reduce(((n, x) => n + (x === c ? 1 : 0)), 0)
};
const n = "bugs bunny was here".count("b")
console.log(n)
与上述原型类似,但不为扼杀分配阵列。 分配是上文几乎每个版本的问题,但备选案文除外。 这避免了假装法,重新使用已安装的浏览器。 减少职能。
下面用定期的表述来测试时间长度。 测试确保你不会有16个或16个以上的连续非商品特性。 如果它通过测试,那么它就开始分割扼杀。 计算mas数与点数减去点数一样简单。
var mainStr = "str1,str2,str3,str4";
var testregex = /([^,]{16,})/g;
if (testregex.test(mainStr)) {
alert("values must be separated by commas and each may not exceed 15 characters");
} else {
var strs = mainStr.split( , );
alert("mainStr contains " + strs.length + " substrings separated by commas.");
alert("mainStr contains " + (strs.length-1) + " commas.");
}
采用Node.js v.6.0.0的Im,最快的是指数(Lo Sauer的回答第3种方法)。
第二是:
function count(s, c) {
var n = 0;
for (let x of s) {
if (x == c)
n++;
}
return n;
}
并且:
function character_count(string, char, ptr = 0, count = 0) {
while (ptr = string.indexOf(char, ptr) + 1) {count ++}
return count
}
• 处理愤怒问题!
在这里,与<代码>split()和替代方法一样快,这些方法比reg法( Chrome和 Firefox)更快。
let num = 0;
let str = "str1,str2,str3,str4";
//Note: Pre-calculating `.length` is an optimization;
//otherwise, it recalculates it every loop iteration.
let len = str.length;
//Note: Don t use a `for (... of ...)` loop, it s slow!
for (let charIndex = 0; charIndex < len; ++charIndex) {
if (str[charIndex] === , ) {
++num;
}
}
var mainStr = "str1,str2,str3,str4";
var splitStr = mainStr.split(",").length - 1; // subtracting 1 is important!
alert(splitStr);
加入一个阵列,使我们有一些因素,其数量总是比性质上的事例多1个。 这可能不是最富有记忆力的,但如果你的投入总是很小,那就是一个直截了当和容易理解的方式。
如果你需要穿透非常大的体(超过100个特性),或者如果是处理大量数据的核心结构,我会建议采取不同的战略。
我的解决办法:
function countOcurrences(str, value){
var regExp = new RegExp(value, "gi");
return str.match(regExp) ? str.match(regExp).length : 0;
}
我知道这个问题可能是一个老问题,但我对贾瓦文的低层开端人有一个简单的解决办法。
作为开端人,我只能理解这个问题的一些解决办法,因此,我使用了两个封顶的<>FOR路程,以检查每一特性在座标、加插一个上的每一种特性。
我制造了一个新空白物体,每个关键财产具有特性,其价值是每一特性在座标上出现的次数。
例假功能:-
function countAllCharacters(str) {
var obj = {};
if(str.length!==0){
for(i=0;i<str.length;i++){
var count = 0;
for(j=0;j<str.length;j++){
if(str[i] === str[j]){
count++;
}
}
if(!obj.hasOwnProperty(str[i])){
obj[str[i]] = count;
}
}
}
return obj;
}