জাভাস্ক্রিপ্টে একটি স্ট্রিংয়ে একটি অক্ষরের সংখ্যার সংখ্যা গণনা করুন


525

আমার একটি স্ট্রিংয়ে একটি চরিত্রের সংঘটনগুলির সংখ্যা গুনতে হবে।

উদাহরণস্বরূপ, ধরুন আমার স্ট্রিংটিতে রয়েছে:

var mainStr = "str1,str2,str3,str4";

আমি কমা ,চরিত্রের গণনাটি খুঁজতে চাই , যা 3 is এবং কমা বরাবর বিভক্ত হওয়ার পরে পৃথক স্ট্রিংগুলির গণনা, যা 4।

আমাকে আরও যাচাই করতে হবে যে স্ট্রিংগুলির প্রত্যেকটি যেমন str1 বা str2 বা str3 বা str4 বা 15 এর চেয়ে বেশি হওয়া উচিত নয় say

উত্তর:


763

আমি এই উত্তর আপডেট করেছি। আমি ম্যাচটি আরও ভালভাবে ব্যবহার করার ধারণাটি পছন্দ করি তবে এটি ধীর:

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

jsfiddle

আপনি যদি আগে থেকে কী সন্ধান করছেন তা যদি আপনি জানেন তবে আপনি নির্মাতা ব্যবহার করতে পারবেন না RegExpএবং gএকটি যুক্তি হিসাবে পতাকাটিতে পাস করুন যদি আপনি নিয়মিত অভিব্যক্তি আক্ষরিক ব্যবহার করুন ।

matchnullএইভাবে কোন ফলাফল সঙ্গে ফিরে|| []

আমি 2009 সালে মূল উত্তরটি নীচে রয়েছে below এটি অপ্রয়োজনীয়ভাবে অ্যারে তৈরি করে তবে একটি বিভাজন ব্যবহার করা দ্রুত হয় (সেপ্টেম্বর 2014)। আমি দ্বিধাবিভক্ত, আমার যদি সত্যিই গতির প্রয়োজন হত তবে আমি কোনও বিভাজন ব্যবহার করব কিনা এমন প্রশ্নই আসে না, তবে আমি ম্যাচটি ব্যবহার করতে পছন্দ করব।

পুরানো উত্তর (২০০৯ থেকে):

যদি আপনি কমা খুঁজছেন:

(mainStr.split(",").length - 1) //3

আপনি যদি str খুঁজছেন

(mainStr.split("str").length - 1) //4

@ লো এর উত্তরে এবং আমার নিজের নির্বোধ জাসস্পিফ পরীক্ষার বিভাজন উভয়ই কমপক্ষে ক্রোমে দ্রুত গতিতে এগিয়ে আসে তবে অতিরিক্ত অতিরিক্ত অ্যারে তৈরি করা ঠিক বুদ্ধিমান বলে মনে হয় না।


8
পরীক্ষা দেখায় ফায়ারফক্স বিভক্ত হওয়ার সময় অন্য যে কোনও ব্রাউজারের তুলনায় অনেক দ্রুত faster jsperf.com/count-tumber-of-occurances-in-string
vsync

4
আহ, আমি সবেমাত্র ভ্যানসিঙ্কের জাসস্পিফটি পরীক্ষা করেছি এবং ক্রোম, ফায়ারফক্স এবং আইই তে রেগেক্স ধীর ছিল । যথাক্রমে 68%, 100% এবং 14%। আমার i7 2600 আছে
মস

56
আমি একটি রেইজেক্স ব্যবহার করার ধারণাটি সত্যিই অপছন্দ করি কারণ "আপনার এটি আরও ভাল"। রেজেক্সগুলির উদ্দেশ্য থাকে তবে সাধারণত যখন একটি সাধারণ নন-রেজেক্স সমাধান থাকে তখন এটি আরও ভাল পছন্দ। এছাড়াও লক্ষ করুন যে উভয় পদ্ধতিই একটি অ্যারে তৈরি করে, তাই এটি কোনও রেজেেক্স ব্যবহার করার কোনও কারণ নয়।
জ্যাস্পার

4
আমি এটা ভাল পছন্দ এই ক্ষেত্রে একটি কারণে। বেশ কয়েকটি সংখ্যক ঘটনার জন্য একটি স্ট্রিকে একটি অ্যারেতে বিভক্ত করা সেই তথ্যটি পাওয়ার উপায় round একটি অ্যারের বিভক্ত করা কেবলমাত্র বাস্তবায়নের বিশদের কারণে দ্রুততর হয়, এমন কিছু যা পরিবর্তিত হতে পারে, যেখানে ম্যাচের সংখ্যা পাওয়া পঠনযোগ্যতার উন্নতি, অভিপ্রায়টি সুস্পষ্ট এবং একটি অব্যবহৃত ডেটা কাঠামো তৈরি করে এবং পূরণ করে না।
বিয়ন্সের

30
স্প্লিট () জাভাস্ক্রিপ্টের একটি প্রাথমিক সরঞ্জাম, ধারণাটি সহজ এবং স্প্লিট গণনা স্পষ্ট অভিপ্রায় দেয় এবং সম্পূর্ণ পঠনযোগ্য।
bradw2k 21

217

কমপক্ষে চারটি উপায় রয়েছে। সর্বোত্তম বিকল্প, যা দেশীয় RegEx ইঞ্জিনে দ্রুততম হওয়া উচিত - এটি শীর্ষে স্থাপন করা হয়। jsperf.com বর্তমানে ডাউন আছে, অন্যথায় আমি আপনাকে পারফরম্যান্সের পরিসংখ্যান সরবরাহ করব।

আপডেট : দয়া করে এখানে পারফরম্যান্স পরীক্ষাগুলি সন্ধান করুন এবং সেগুলি নিজেরাই চালান, যাতে আপনার কার্যকারিতা ফলাফলের অবদান রাখতে পারে। ফলাফলের সুনির্দিষ্ট পরে দেওয়া হবে।

1।

 ("this is foo bar".match(/o/g)||[]).length
 //>2

2।

"this is foo bar".split("o").length-1
 //>2

বিভক্ত বাঞ্ছনীয়। রিসোর্স ক্ষুধার্ত। প্রতিটি ম্যাচের জন্য 'অ্যারে' এর নতুন উদাহরণ বরাদ্দ করে। FileReader এর মাধ্যমে> 100MB ফাইলের জন্য চেষ্টা করে দেখুন না। আপনি প্রকৃতপক্ষে Chrome এর প্রোফাইলার বিকল্পটি ব্যবহার করে খুব সহজেই উত্সের ব্যবহার পর্যবেক্ষণ করতে পারেন ।

3।

var stringsearch = "o"
   ,str = "this is foo bar";
for(var count=-1,index=-2; index != -1; count++,index=str.indexOf(stringsearch,index+1) );
 //>count:2

4।

একটি একক চরিত্র অনুসন্ধান করা

var stringsearch = "o"
   ,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
 //>count:2

হালনাগাদ:

5।

উপাদান ম্যাপিং এবং ফিল্টারিং, পাইথোনিয়ান 'জেনারেটর' ব্যবহার না করে সামগ্রিক সংস্থান সংক্রান্ত পূর্বনির্দেশের কারণে প্রস্তাবিত নয়

var str = "this is foo bar"
str.split('').map( function(e,i){ if(e === 'o') return i;} )
             .filter(Boolean)
//>[9, 10]
[9, 10].length
//>2

ভাগ করুন: আমি বর্তমানে চরিত্র গণনার 8 টি পদ্ধতি নিয়ে এই টুকরোটি তৈরি করেছি , যাতে আমরা সরাসরি আমাদের ধারণাগুলি পুল করতে পারি এবং ভাগ করতে পারি - কেবল মজাদার জন্য এবং সম্ভবত কিছু আকর্ষণীয় মাপদণ্ড :)

https://gist.github.com/2757250


27
কি ||[]করছে তা বুঝতে আমার একটু সময় লেগেছে তবে এই উত্তরটি দুর্দান্ত! কারো জন্য অন্য মাথা প্রারম্ভিক, match()আয় nullযদি কোনো মিল খুঁজে পাওয়া যায় এবং ||[]0 দৈর্ঘ্য অ্যারে যদি ফিরে আসবে match()আয়null , অর্থ length()পরিবর্তে 0 ফিরে আসবে এক ধরনের ত্রুটি উৎপাদনে।
নাথান

1
নাথান, আমার প্রতিরক্ষার উদ্দেশ্যে, আমি উপরের কোডটি লেখার আগে সেই বিষয়ে বিস্তারিত লিখেছি : gist.github.com/2757164 । আমি ছোট কোড-পিসগুলির ব্লগ পোস্টগুলি এড়াতে চাই, যা আপনাকে গুগল-অনুসন্ধানের মাধ্যমে তাত্ক্ষণিকভাবে অ্যাক্সেসের অনুমতি দিত। স্নিপেট সংগ্রহশালা হিসাবে সংক্ষেপে খুব কম সূচিযুক্ত এবং আদর্শের চেয়ে কম। পিএস: আমিও অস্পষ্ট সিনট্যাকটিক আইডিসিএনক্র্যাসিকে ঘৃণা করি।
লোরেঞ্জ লো Sauer

2
লো Sauer, নিজেকে রক্ষা করার দরকার নেই, কোডটি শক্ত এবং আমি কীভাবে এটি কাজ করে তা নির্ধারণ করে নিজেই কিছু শিখেছি :) আমি উত্তরটি হিসাবে চিহ্নিত হিসাবে আসলে এই পদ্ধতিটি পছন্দ করি। যদি আমরা ফলাফলগুলি ব্যবহার না করি তবে একটি স্ট্রিংকে বিভক্ত করার দরকার নেই be
নাথান

3
আপনার তৃতীয় পদ্ধতিটি (এছাড়াও, দুর্ভাগ্যক্রমে, দ্রুততম), খড়ের খালি 0 সূচকগুলিতে কোনও ম্যাচ মিস করবে। পরিবর্তে লুপ চলাকালীন আপনি একটি do ব্যবহার করে এটি ঠিক করতে পারেন: var strsearch = "o", str = "othis is foo bar", সূচক = -1, গণনা = -1; do {index = str.indexOf (স্টার্স অনুসন্ধান, সূচক + 1); ++, গণনা; } যখন (সূচক! = -1); গণনা
আগস্ট

1
এটি শুরু করার পক্ষে যথেষ্ট index = -2, তবে @ অগাস্টাসকে অনেক ধন্যবাদ
লোরেঞ্জ লো Sauer

18

স্টিং প্রোটোটাইপে এই ফাংশনটি যুক্ত করুন:

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

কি "stringsstringstrings".count("str")?
তোসকান

12

একটি দ্রুত গুগল অনুসন্ধান এটি পেয়েছে ( http://www.codecodex.com/wiki/index.php?title=Count_the_number_of_occurrences_of_a_specific_character_in_a_string#JavaScript ) থেকে

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

4
*SyntaxError: nothing to repeat

1
যুক্তিটি একটি নিয়মিত প্রকাশ হতে হবে। সুতরাং আপনি যদি গণনা করতে চান তবে আপনাকে '[* ]'
জেরার্ড ওনিল

8

সহজভাবে, স্ট্রিংয়ে কোনও অক্ষরের উপস্থিতিগুলির সংখ্যা জানতে বিভাজনটি ব্যবহার করুন ।

mainStr.split(',').length // 4 প্রদান করে যা ডিলিমিটার কমা ব্যবহার করে বিভক্ত হওয়ার পরে স্ট্রিংয়ের সংখ্যা

mainStr.split(',').length - 1 // দেয় 3 যা কমা গণনা


এটি মূলত এখানে প্রয়োজনীয় উত্তর। আমি হতবাক কেউ এখনও নির্দেশ করেনি।
রোহিত গুপ্ত

7

এখানে একটি অনুরূপ সমাধান, তবে এটি ব্যবহার করে Array.prototype.reduce

function countCharacters(char, string) {
  return string.split('').reduce((acc, ch) => ch === char ? acc + 1: acc, 0)
}

হিসাবে উল্লেখ করা হয়েছে, String.prototype.splitঅনেক দ্রুত কাজ করে String.prototype.replace


6

আমি খুঁজে পেয়েছি যে খুব বড় স্ট্রিংয়ে অক্ষরের সন্ধানের সেরা পন্থা (এটি 1 000 000 অক্ষর দীর্ঘ, উদাহরণস্বরূপ) replace()পদ্ধতিটি ব্যবহার করা ।

window.count_replace = function (str, schar) {
    return str.length - str.replace(RegExp(schar), '').length;
};

স্ট্রিংয়ের মধ্যে কোনও অক্ষর সন্ধানের অন্যান্য পদ্ধতির পাশাপাশি এই পদ্ধতিটি পরীক্ষা করতে আপনি আর একটি জেএসপিআইফ স্যুট দেখতে পাচ্ছেন ।


5

আপনি নিজের স্ট্রিংটি বিশ্রামও দিতে পারেন এবং এটি ব্যবহার করে উপাদানগুলির অ্যারের মতো এটির সাথে কাজ করতে পারেন

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


1
দ্বিতীয়টি কার্যকর, ধন্যবাদ!
অ্যালেক্সগেরা

4

আমি গৃহীত উত্তরের উপর কিছুটা উন্নতি করেছি, এটি কেস-সংবেদনশীল / কেস-সংবেদনশীল মিলের সাথে চেক করতে দেয় এবং স্ট্রিং অবজেক্টের সাথে সংযুক্ত একটি পদ্ধতি:

String.prototype.count = function(lit, cis) {
    var m = this.toString().match(new RegExp(lit, ((cis) ? "gi" : "g")));
    return (m != null) ? m.length : 0;
}

lit (যেমন 'প্রাক্তন') অনুসন্ধানের স্ট্রিং, এবং সিআইএস হ'ল কেস-সংবেদনশীলতা, মিথ্যাতে ডিফল্ট করা হয়, এটি কেস সংবেদনশীল ম্যাচগুলি বেছে নেওয়ার অনুমতি দেয়।


'I love StackOverflow.com'লোয়ার-কেস চিঠির জন্য স্ট্রিংটি অনুসন্ধান করতে 'o', আপনি এটি ব্যবহার করবেন:

var amount_of_os = 'I love StackOverflow.com'.count('o');

amount_of_osসমান হবে 2


যদি আমরা কেস-সংবেদনশীল মিলটি ব্যবহার করে আবার একই স্ট্রিংটি অনুসন্ধান করতে চাইতাম তবে আপনি ব্যবহার করবেন:

var amount_of_os = 'I love StackOverflow.com'.count('o', true);

এবার, amount_of_osসমান হবে 3, যেহেতু Oস্ট্রিং থেকে মূলধন অনুসন্ধানে অন্তর্ভুক্ত হয়।


4

ঠিক আছে, রেজিএক্সপ্যাক্স সহ অন্য একটি - সম্ভবত দ্রুত নয়, তবে সংক্ষিপ্ত এবং আরও ভাল পাঠযোগ্য তবে অন্যরা, আমার ক্ষেত্রে কেবল '_'গণনা করার জন্য

key.replace(/[^_]/g,'').length

আপনার চরের মতো দেখতে না এমন সব কিছু সরিয়ে ফেলুন তবে ইনপুট হিসাবে স্ট্রিং সহ এটি দেখতে সুন্দর লাগছে না


4

স্প্লিট বনাম RegExp এর পারফরম্যান্স

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 + "\n" + 'RegExp Execution time: ' + reg_time + "\n");



3

আমি একটি ছোট প্রকল্পে কাজ করছিলাম যার একটি সাব-স্ট্রিং কাউন্টার প্রয়োজন। ভুল বাক্যাংশগুলি অনুসন্ধান করে আমার কোনও ফলাফল দেওয়া হয়নি, তবে নিজের প্রয়োগটি লেখার পরে আমি এই প্রশ্নটিতে হোঁচট খেয়েছি। যাইহোক, এখানে আমার উপায়, এটি সম্ভবত এখানে সবচেয়ে ধীর তবে কারও পক্ষে সহায়ক হতে পারে:

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

http://jsfiddle.net/5ZzHt/1/

আপনি যদি এই বাস্তবায়ন ব্যর্থ হতে বা কিছু মান অনুসরণ না করেন তবে দয়া করে আমাকে জানান! :)

আপডেট আপনি বিকল্প করতে চাইতে পারেন:

    for (var i = 0; i < input.length; i++) {

সঙ্গে:

for (var i = 0, input_length = input.length; i < input_length; i++) {

উপরোক্ত বিষয়ে আলোচনা করা আগ্রহজনক: http://www.erichynds.com/blog/javascript-length-property-is-a- store-value


1
হ্যাঁ, এবং এটি কেবল সাবচার্স নয়, সাবস্ট্রিংয়ের জন্য কাজ করবে। তবে আপনাকে ফাংশনে প্যারামিটারগুলি যুক্ত করতে হবে :)
নিকো


2

এখানে আমার সমাধান। ইতিমধ্যে আমার সামনে প্রচুর সমাধান পোস্ট করা হয়েছে। তবে আমি এখানে আমার মতামত ভাগ করতে পছন্দ করি।

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

এখানে আপনি আমার আরপিএল খুঁজে পাবেন


2

দ্রুততম পদ্ধতিটি সূচক অপারেটরের মাধ্যমে বলে মনে হচ্ছে:

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

বা প্রোটোটাইপ ফাংশন হিসাবে:

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


1

দৈর্ঘ্য পরীক্ষা করতে নিম্নলিখিতটি নিয়মিত প্রকাশ করে uses টেস্টেক্স নিশ্চিত করে যে আপনার 16 বা ততোধিক ধারাবাহিক অ-কমা অক্ষর নেই। যদি এটি পরীক্ষায় উত্তীর্ণ হয়, তবে এটি স্ট্রিংকে বিভক্ত করতে এগিয়ে যায়। কমা গণনা টোকেন মাইনাস এক গণনা হিসাবে সহজ।

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.");
}


1

স্ট্রিং.স্প্লিট (কাঙ্ক্ষিতচরেকটার) সম্পর্কে কি। দৈর্ঘ্য -১

উদাহরণ:

var str = "জীবন কেমন হয়"; var len = str.split ("h")। দৈর্ঘ্য -1; উপরের স্ট্রিংয়ে "h" অক্ষরের জন্য 2 টি গণনা দেবে;


1

আমি নোড.জেএস ভি .0.০.০ ব্যবহার করছি এবং দ্রুততম সূচক সহকারে (লো সৌরের উত্তরের ২ য় পদ্ধতি)।

দ্বিতীয়টি হ'ল:

function count(s, c) {
  var n = 0;
  for (let x of s) {
    if (x == c)
      n++;
  }
  return n;
}


1

এখানে বিভাজনের মতো প্রায় দ্রুত এবং প্রতিস্থাপনের পদ্ধতিগুলি রয়েছে যা রেগেক্স পদ্ধতির (ক্রোমে) তুলনায় খুব সামান্য দ্রুত।

var num = 0;
for (ch of "str1,str2,str3,str4")
{
    if (ch === ',') num++;
}

1

আমি কেবল repl.it এ খুব দ্রুত এবং নোংরা পরীক্ষা করেছি নোড ভি ব্যবহার করেছি। একটি একক চরিত্রের জন্য, লুপের মানটি দ্রুততম:

কিছু কোড :

// 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.843ms
charCount2: 11.614ms
charCount3: 11.470ms
=> undefined
   perfIt()
charCount1: 3.006ms
charCount2: 8.193ms
charCount3: 7.941ms
=> undefined
   perfIt()
charCount1: 2.539ms
charCount2: 7.496ms
charCount3: 7.601ms
=> undefined
   perfIt()
charCount1: 2.654ms
charCount2: 7.540ms
charCount3: 7.424ms
=> undefined
   perfIt()
charCount1: 2.950ms
charCount2: 9.445ms
charCount3: 8.589ms

1

এবং আছে:

function character_count(string, char, ptr = 0, count = 0) {
    while (ptr = string.indexOf(char, ptr) + 1) {count ++}
    return count
}

পূর্ণসংখ্যার সাথেও কাজ করে!


0

আমার সমাধান:

function countOcurrences(str, value){
   var regExp = new RegExp(value, "gi");
   return str.match(regExp) ? str.match(regExp).length : 0;  
}

এটি ম্যাচ ছাড়া String.prototype.matchরিটার্ন হিসাবে কাজ করবে না null। এর অর্থ কোনও lengthগুণাবলীর সাথে কোনও বস্তুর কোনও রেফারেন্স নেই । অন্য কথায়:String.prototype.match.call('willnotwork', /yesitwill/) === null
লরেঞ্জ লো Sauer

0

লিও Sauers জবাবের পঞ্চম পদ্ধতিটি ব্যর্থ হয়, যদি চরিত্রটি স্ট্রিংয়ের শুরুতে থাকে। যেমন

var needle ='A',
  haystack = 'AbcAbcAbc';

haystack.split('').map( function(e,i){ if(e === needle) return i;} )
  .filter(Boolean).length;

3 এর পরিবর্তে 2 দেবে, কারণ বুলিয়ান ফিল্টার ফান্ট 0 দেয়।

অন্যান্য সম্ভাব্য ফিল্টার ফাংশন:

haystack.split('').map(function (e, i) {
  if (e === needle) return i;
}).filter(function (item) {
  return !isNaN(item);
}).length;

0

আমি জানি এটি একটি পুরানো প্রশ্ন হতে পারে তবে জাভাস্ক্রিপ্টে নিম্ন-স্তরের প্রাথমিকদের জন্য আমার একটি সহজ সমাধান রয়েছে।

একটি শিক্ষানবিস হিসাবে, আমি কেবল এই প্রশ্নের কয়েকটি সমাধান বুঝতে পারি তাই আমি স্ট্রিংয়ের প্রতিটি চরিত্রের বিপরীতে প্রতিটি অক্ষর পরীক্ষা করতে লুপের জন্য দুটি নেস্ট ব্যবহার করেছি , প্রতিটি চরিত্রের জন্য একটি কাউন্টের ভেরিয়েবল বাড়িয়ে দেখা গেছে যে সেই চরিত্রের সমান।

আমি একটি নতুন ফাঁকা বস্তু তৈরি করেছি যেখানে প্রতিটি সম্পত্তি কী একটি অক্ষর এবং মানটি প্রতিটি অক্ষরকে স্ট্রিংয়ে (গণনা) কতবার প্রদর্শিত হয়েছিল is

ফাংশন উদাহরণ:

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

0

আমি বিশ্বাস করি যে আপনি নীচের সমাধানটি খুব সংক্ষিপ্ত, খুব দ্রুত, খুব দীর্ঘ স্ট্রিংয়ের সাথে কাজ করতে সক্ষম, একাধিক অক্ষর অনুসন্ধানগুলি সমর্থন করতে সক্ষম, ত্রুটি প্রমাণ এবং খালি স্ট্রিং অনুসন্ধানগুলি পরিচালনা করতে সক্ষম হবেন।

function substring_count(source_str, search_str, index) {
    source_str += "", search_str += "";
    var count = -1, index_inc = Math.max(search_str.length, 1);
    index = (+index || 0) - index_inc;
    do {
        ++count;
        index = source_str.indexOf(search_str, index + index_inc);
    } while (~index);
    return count;
}

ব্যবহারের উদাহরণ:

console.log(substring_count("Lorem ipsum dolar un sit amet.", "m "))

function substring_count(source_str, search_str, index) {
    source_str += "", search_str += "";
    var count = -1, index_inc = Math.max(search_str.length, 1);
    index = (+index || 0) - index_inc;
    do {
        ++count;
        index = source_str.indexOf(search_str, index + index_inc);
    } while (~index);
    return count;
}

উপরের কোডটি জাকুব ওয়াওসকিজিকের প্রধান পারফরম্যান্স বাগটি ঠিক করে যে এই কোডটি ম্যাচের জন্য নজর রাখে তবুও ইনডেক্স ওফ বলছে যে সেখানে কিছুই নেই এবং তার সংস্করণটি নিজেই কাজ করছে না কারণ তিনি ফাংশন ইনপুট পরামিতিগুলি ভুলে গিয়েছিলেন।


0
var a = "acvbasbb";
var b= {};
for (let i=0;i<a.length;i++){
    if((a.match(new RegExp(a[i], "g"))).length > 1){
        b[a[i]]=(a.match(new RegExp(a[i], "g"))).length;
    }
}
console.log(b);

জাভাস্ক্রিপ্টে আপনি স্ট্রিংয়ে কোনও অক্ষরের উপস্থিতি পেতে উপরের কোডটি ব্যবহার করতে পারেন।



0

ফাংশনটি স্ট্রিং স্ট্রিংকে প্যারামিটার হিসাবে গ্রহণ করে এবং স্ট্রিংয়ের প্রতিটি অনন্য অক্ষরের উপস্থিতি গণনা করে। ফলাফলটি প্রতিটি অক্ষরের জন্য মান - জোড়ায় আসে।

var charFoundMap = {};//object defined
    for (var i = 0; i < str.length; i++) {

       if(!charFoundMap[ str[i] ])  {
        charFoundMap[ str[i] ]=1;
       } 
       else
       charFoundMap[ str[i] ] +=1;
       //if object does not contain this 
    }
    return charFoundMap;

} 

আপনি প্রশ্নের দ্বিতীয় অংশটি ভুলে গেছেন: "আমাকে আরও যাচাই করতে হবে যে স্ট্রিংগুলির প্রতিটি যেমন str1 বা str2 বা str3 বা str4 বা 15 এর চেয়ে বেশি হওয়া উচিত নয়, বলুন।"
ম্যাক্সিমাম লুনোইস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.