উত্তর:
খুব সহজ:
var count = 0;
for(var i = 0; i < array.length; ++i){
if(array[i] == 2)
count++;
}
const count = countItems(array, 2);এবং প্রয়োগের বিশদটি ভিতরে যুক্তিযুক্ত হতে পারে।
[ এই উত্তরটি কিছুটা তারিখযুক্ত: সম্পাদনাগুলি পড়ুন ]
বলুন আপনার বন্ধুদের হ্যালো: mapএবং filterএবং reduceএবং forEachএবং everyইত্যাদি
(আমি কেবল মাঝে মাঝে জাভাস্ক্রিপ্টে লুপগুলি লিখি কারণ ব্লক-স্তরীয় স্কোপিং অনুপস্থিত, সুতরাং আপনাকে যদি আপনার পুনরাবৃত্তি সূচক বা মান ক্যাপচার করতে বা ক্লোন করতে হয় তবে আপনাকে লুপের বডি হিসাবে কোনও ফাংশন ব্যবহার করতে হবে For সাধারণত আরও দক্ষ, তবে কখনও কখনও আপনার একটি বন্ধ হওয়া দরকার)
সর্বাধিক পঠনযোগ্য উপায়:
[....].filter(x => x==2).length
(আমরা লিখতে পারতাম .filter(function(x){return x==2}).length পরিবর্তে )
নিম্নলিখিতটি ও (এন) এর চেয়ে আরও বেশি স্থান-দক্ষ (ও (1)), তবে আমি নিশ্চিত না যে আপনি সময়ের সাথে কতটা সুবিধা / জরিমানা দিতে পারেন (আপনি যেহেতু পরিদর্শন করেছেন তাই ধ্রুবক ফ্যাক্টরের চেয়ে বেশি নয়) প্রতিটি উপাদান ঠিক একবার):
[....].reduce((total,x) => (x==2 ? total+1 : total), 0)
(আপনার যদি এই নির্দিষ্ট কোডের টুকরোটি অপ্টিমাইজ করার দরকার হয় তবে কিছু ব্রাউজারে লুপ দ্রুততর হতে পারে ... আপনি jsperf.com এ জিনিসগুলি পরীক্ষা করতে পারেন))
তারপরে আপনি মার্জিত হতে পারেন এবং এটিকে একটি প্রোটোটাইপ ফাংশনে পরিণত করতে পারেন:
[1, 2, 3, 5, 2, 8, 9, 2].count(2)
এটার মত:
Object.defineProperties(Array.prototype, {
count: {
value: function(value) {
return this.filter(x => x==value).length;
}
}
});
উপরের সম্পত্তির সংজ্ঞাটির মধ্যে আপনি নিয়মিত পুরানো ফর লুপ কৌশলটি (অন্যান্য উত্তর দেখুন) আটকে রাখতে পারেন (আবার এটি সম্ভবত আরও দ্রুত হবে)।
2017 সম্পাদনা :
ওহো, এই উত্তরটি সঠিক উত্তরের চেয়ে বেশি জনপ্রিয় হয়েছে। আসলে, কেবল গৃহীত উত্তরটি ব্যবহার করুন। যদিও এই উত্তরটি সুন্দর হতে পারে, জেএস সংকলক সম্ভবত সম্ভবত এই ধরনের ক্ষেত্রে অনুকূলিত হন না (বা নির্দিষ্ট কারণে নয়)। সুতরাং আপনার লুপের জন্য সত্যই একটি সহজ লেখা উচিত:
Object.defineProperties(Array.prototype, {
count: {
value: function(query) {
/*
Counts number of occurrences of query in array, an integer >= 0
Uses the javascript == notion of equality.
*/
var count = 0;
for(let i=0; i<this.length; i++)
if (this[i]==query)
count++;
return count;
}
}
});
আপনি এমন একটি সংস্করণ সংজ্ঞায়িত করতে পারেন .countStrictEq(...)যা ===সাম্যের ধারণাটি ব্যবহার করেছিল । আপনি যা করছেন তার জন্য সাম্যের ধারণাটি গুরুত্বপূর্ণ হতে পারে! (উদাহরণস্বরূপ [1,10,3,'10'].count(10)==2, কারণ জাভাস্ক্রিপ্টে '4' == 4 এর মতো নম্বর ... সুতরাং এটি কল করে .countEqবা .countNonstrictএটি ==অপারেটরটি ব্যবহারের উপর জোর দেয় ))
collections.Counterপ্রথম স্থানে গণনা না করতে এড়াতে আপনার নিজস্ব মাল্টিসেট ডেটা স্ট্রাকচার (যেমন পাইথনের ' ' এর মতো ) ব্যবহার করেও বিবেচনা করুন।
class Multiset extends Map {
constructor(...args) {
super(...args);
}
add(elem) {
if (!this.has(elem))
this.set(elem, 1);
else
this.set(elem, this.get(elem)+1);
}
remove(elem) {
var count = this.has(elem) ? this.get(elem) : 0;
if (count>1) {
this.set(elem, count-1);
} else if (count==1) {
this.delete(elem);
} else if (count==0)
throw `tried to remove element ${elem} of type ${typeof elem} from Multiset, but does not exist in Multiset (count is 0 and cannot go negative)`;
// alternatively do nothing {}
}
}
ডেমো:
> counts = new Multiset([['a',1],['b',3]])
Map(2) {"a" => 1, "b" => 3}
> counts.add('c')
> counts
Map(3) {"a" => 1, "b" => 3, "c" => 1}
> counts.remove('a')
> counts
Map(2) {"b" => 3, "c" => 1}
> counts.remove('a')
Uncaught tried to remove element a of type string from Multiset, but does not exist in Multiset (count is 0 and cannot go negative)
সাইডেনোট: যদিও আপনি এখনও যদি ফাংশনাল-প্রোগ্রামিংয়ের পথটি (বা অ্যারে.প্রোটোটাইপকে ছাড়িয়ে না ফেলে কোনও ওয়ান-লাইনার) চান, তবে আপনি আজকাল এটিকে আরও সংক্ষিপ্তভাবে লিখতে পারেন [...].filter(x => x==2).length। আপনি যদি পারফরম্যান্সের বিষয়ে যত্নশীল হন তবে নোট করুন যে এটি লম্পট (ও (এন) সময়) এর মতো একই পারফরম্যান্সের জন্য, এটি ও (এন) অতিরিক্ত মেমরির (ও (1) মেমরির পরিবর্তে) প্রয়োজন হতে পারে কারণ এটি প্রায় হবে অবশ্যই একটি মধ্যবর্তী অ্যারে তৈরি করুন এবং তারপরে সেই মধ্যবর্তী অ্যারের উপাদানগুলি গণনা করুন।
array.reduce(function(total,x){return x==value? : total+1 : total}, 0)
[...].reduce(function(total,x){return x==2 ? total+1 : total}, 0)
const count = (list) => list.filter((x) => x == 2).length। তারপরে count(list)তালিকাটি সংখ্যার একটি অ্যারে যেখানে ফোন করে এটি ব্যবহার করুন । আপনি করতে পারেনconst count = (list) => list.filter((x) => x.someProp === 'crazyValue').length অবজেক্টের অ্যারেতে ক্রেজিভ্যালুয়ের উদাহরণ গণনা । দ্রষ্টব্য, এটি সম্পত্তিটির জন্য একটি সঠিক মিল।
জেএসকে ES6 আপডেট:
মনে রাখবেন যে আপনার সর্বদা ট্রিপল সমান ব্যবহার করা উচিত: ===সঠিক তুলনা পেতে:
// Let has local scope
let array = [1, 2, 3, 5, 2, 8, 9, 2]
// Functional filter with an Arrow function
array.filter(x => x === 2).length // -> 3
জেএসে নিম্নলিখিত সর্বসম্মত তীর ফাংশন (ল্যাম্বডা ফাংশন):
(x) => {
const k = 2
return k * x
}
একক ইনপুট জন্য এই সংক্ষিপ্ত ফর্ম সরল করা যেতে পারে:
x => 2 * x
যেখানে returnনিহিত
2017: যদি কেউ এখনও প্রশ্নটিতে আগ্রহী হন তবে আমার সমাধানটি নিম্নলিখিত:
const arrayToCount = [1, 2, 3, 5, 2, 8, 9, 2];
const result = arrayToCount.filter(i => i === 2).length;
console.log('number of the found elements: ' + result);
আপনি যদি ল্যাড্যাশ ব্যবহার করছেন বা _.countBy পদ্ধতিতে আন্ডারকোর করছেন তবে অ্যারেতে প্রতিটি মান অনুসারে কী-করা মোটের সামগ্রীর অবজেক্ট সরবরাহ করবে। আপনি যদি কেবল একটি মান গণনা করতে চান তবে আপনি এটিকে ওয়ান-লাইনারে পরিণত করতে পারেন:
_.countBy(['foo', 'foo', 'bar'])['foo']; // 2
এটি সংখ্যার অ্যারেগুলিতেও সূক্ষ্ম কাজ করে। আপনার উদাহরণের জন্য ওয়ান-লাইনারটি হ'ল:
_.countBy([1, 2, 3, 5, 2, 8, 9, 2])[2]; // 3
সবচেয়ে অদ্ভুত উপায়টি আমি এটি করার কথা ভাবতে পারি:
(a.length-(' '+a.join(' ')+' ').split(' '+n+' ').join(' ').match(/ /g).length)+1
কোথায়:
আমার পরামর্শ, কিছুক্ষণ বা লুপের জন্য ব্যবহার করুন ;-)
লুপ ব্যবহার না করার অর্থ সাধারণত প্রক্রিয়াটি কোনও পদ্ধতিতে হস্তান্তর করা হয় যা এটি করে লুপ ব্যবহার ।
আমাদের লুপ ঘৃণা কোডার একটি মূল্য দিয়ে তার ঘৃণ্যতা সন্তুষ্ট করতে পারে একটি উপায়:
var a=[1, 2, 3, 5, 2, 8, 9, 2];
alert(String(a).replace(/[^2]+/g,'').length);
/* returned value: (Number)
3
*/
অ্যারে পদ্ধতি হিসাবে যদি এটি উপলভ্য থাকে তবে আপনি বারবার সূচককেও কল করতে পারেন এবং প্রতিবার অনুসন্ধানের পয়েন্টারটি সরাতে পারেন।
এটি কোনও নতুন অ্যারে তৈরি করে না এবং লুপটি ফর ইচ বা ফিল্টারের চেয়ে দ্রুত।
যদি আপনার মিলিয়ন মিলিয়ন সদস্য থাকে তবে এটি কোনও পার্থক্য করতে পারে।
function countItems(arr, what){
var count= 0, i;
while((i= arr.indexOf(what, i))!= -1){
++count;
++i;
}
return count
}
countItems(a,2)
/* returned value: (Number)
3
*/
String(a).match(/2/g).length + 1- যদিও এই বিষয়ে সাবধান হন বা আপনার প্রয়োগটি ডাবল ডিজিটের সাথে দুর্দান্ত খেলবে না।
ফিল্টার হিসাবে অ্যারে ফাংশন ব্যবহার করে পোস্ট করা বেশিরভাগ সমাধান অসম্পূর্ণ কারণ তারা প্যারামিটারাইজড হয় না।
এখানে একটি সমাধান রয়েছে যার সাহায্যে গণনা করার উপাদানটি রান সময়ে নির্ধারণ করা যেতে পারে।
function elementsCount(elementToFind, total, number){
return total += number==elementToFind;
}
var ar = [1, 2, 3, 5, 2, 8, 9, 2];
var elementToFind=2;
var result = ar.reduce(elementsCount.bind(this, elementToFind), 0);
এই পদ্ধতির সুবিধাটি হ'ল এক্স এর চেয়েও বেশি উপাদানের সংখ্যা গণ্য করতে সহজেই ফাংশনটি পরিবর্তন করতে পারে
আপনি হ্রাস ফাংশনটি ইনলাইনও ঘোষণা করতে পারেন
var ar = [1, 2, 3, 5, 2, 8, 9, 2];
var elementToFind=2;
var result = ar.reduce(function (elementToFind, total, number){
return total += number==elementToFind;
}.bind(this, elementToFind), 0);
var elementToFind=2; ... function (elementToFind, total, number){ return total += number==elementToFind; }.bind(this, elementToFind) ...পড়া কঠিন এবং ঠিক উপরের কোন সুবিধা দেয় না ... (acc, x) => acc += number == 2...। আমি যদিও এর +=পরিবর্তে আপনার ব্যবহার পছন্দ করি acc + (number == 2)। যদিও একটি অযৌক্তিক সিনট্যাক্স হ্যাক লাগে।
সত্যিই, কেন আপনার প্রয়োজন হবে mapবা filterএই জন্য?
reduceএই ধরণের অপারেশনের জন্য "জন্মগ্রহণ" হয়েছিল:
[1, 2, 3, 5, 2, 8, 9, 2].reduce( (count,2)=>count+(item==val), 0);
এটাই! (যদি item==valপ্রতিটি পুনরাবৃত্তির করুন, তারপরে 1 সঁচায়ক যোগ করা হবে count, যেমন trueকরতে সমাধান হবে 1)।
একটি ফাংশন হিসাবে:
function countInArray(arr, val) {
return arr.reduce((count,item)=>count+(item==val),0)
}
অথবা, এগিয়ে যান এবং আপনার অ্যারে প্রসারিত করুন:
Array.prototype.count = function(val) {
return this.reduce((count,item)=>count+(item==val),0)
}
এটি ফাংশনে মুড়িয়ে ফেলা ভাল:
let countNumber = (array,specificNumber) => {
return array.filter(n => n == specificNumber).length
}
countNumber([1,2,3,4,5],3) // returns 1
ও (এন) এর সমস্ত অ্যারে আইটেমগুলির জন্য গণনা পাওয়ার জন্য এখানে একটি ES2017 + উপায় রয়েছে:
const arr = [1, 2, 3, 5, 2, 8, 9, 2];
const counts = {};
arr.forEach((el) => {
counts[el] = counts[el] ? (counts[el] += 1) : 1;
});
আপনি optionচ্ছিকভাবে আউটপুটটি বাছাই করতে পারেন:
const countsSorted = Object.entries(counts).sort(([_, a], [__, b]) => a - b);
আপনার উদাহরণ অ্যারের জন্য কনসোল.লগ (গণনা অনুসারে সাজানো):
[
[ '2', 3 ],
[ '1', 1 ],
[ '3', 1 ],
[ '5', 1 ],
[ '8', 1 ],
[ '9', 1 ]
]
আমি বিশ্বাস করি আপনি যা খুঁজছেন তা কার্যকরী পদ্ধতির
const arr = ['a', 'a', 'b', 'g', 'a', 'e'];
const count = arr.filter(elem => elem === 'a').length;
console.log(count); // Prints 3
এলেম === 'এ' শর্ত, এটি নিজের সাথে প্রতিস্থাপন করুন।
count = arr.filter(elem => elem === 'a').lengthবাcount = arr.filter(elem => {return elem === 'a'}).length
আমি জেএস অ্যারের হ্রাস ফাংশনটির একটি শুরুর অনুরাগী।
const myArray =[1, 2, 3, 5, 2, 8, 9, 2];
const count = myArray.reduce((count, num) => num === 2 ? count + 1 : count, 0)
আসলে আপনি যদি অভিনব ধারণা পেতে চান তবে আপনি অ্যারে প্রোটোটাইপে একটি গণনা ফাংশন তৈরি করতে পারেন। তারপরে আপনি এটি পুনরায় ব্যবহার করতে পারেন।
Array.prototype.count = function(filterMethod) {
return this.reduce((count, item) => filterMethod(item)? count + 1 : count, 0);
}
তাহলে কর
const myArray =[1, 2, 3, 5, 2, 8, 9, 2]
const count = myArray.count(x => x==2)
পুনরাবৃত্তি দ্বারা সমাধান
function count(arr, value) {
if (arr.length === 1) {
return arr[0] === value ? 1 : 0;
} else {
return (arr.shift() === value ? 1 : 0) + count(arr, value);
}
}
count([1,2,2,3,4,5,2], 2); // 3
filter, reduceবা forLoopপারফরম্যান্সের দিকে তাকানোর সময় একটি সহজ এবং আরও ব্যয়বহুল, তবে এটি পুনরাবৃত্তি সহ এটি করার দুর্দান্ত উপায়। আমার একমাত্র পরিবর্তনটি: আমি কেবলমাত্র মনে করি অ্যারে অনুলিপি করতে এবং মূল অ্যারের কোনও রূপান্তর এড়াতে কোনও ফাংশন তৈরি করা এবং এর ভিতরে একটি ফিল্টার যুক্ত করা ভাল,
var arrayCount = [1,2,3,2,5,6,2,8];
var co = 0;
function findElement(){
arrayCount.find(function(value, index) {
if(value == 2)
co++;
});
console.log( 'found' + ' ' + co + ' element with value 2');
}
আমি এরকম কিছু করব:
var arrayCount = [1,2,3,4,5,6,7,8];
function countarr(){
var dd = 0;
arrayCount.forEach( function(s){
dd++;
});
console.log(dd);
}
মূল স্তরের ফাইলটিতে অ্যারে শ্রেণীর জন্য একটি নতুন পদ্ধতি তৈরি করুন এবং এটি আপনার প্রকল্পে ব্যবহার করুন।
// say in app.js
Array.prototype.occurrence = function(val) {
return this.filter(e => e === val).length;
}
এটি আপনার প্রকল্পের যে কোনও জায়গায় ব্যবহার করুন -
[1, 2, 4, 5, 2, 7, 2, 9].occurrence(2);
// above line returns 3
এখানে জাভাস্ক্রিপ্টে একটি ওয়ান লাইনার রয়েছে।
(v === 2)অ্যারেতে খুঁজে বের করুন, যাগুলি এবং শূন্যগুলির একটি অ্যারে ফিরে আসবে।[1, 2, 3, 5, 2, 8, 9, 2]
.map(function(v) {
return v === 2 ? 1 : 0;
})
.reduce((a, b) => a + b, 0);
ফলাফল হয় 3।
আপনি এটি কীভাবে চালাতে চান তার উপর নির্ভর করে:
const reduced = (array, val) => { // self explanatory
return array.filter((element) => element === val).length;
}
console.log(reduced([1, 2, 3, 5, 2, 8, 9, 2], 2));
// 3
const reducer = (array) => { // array to set > set.forEach > map.set
const count = new Map();
const values = new Set(array);
values.forEach((element)=> {
count.set(element, array.filter((arrayElement) => arrayElement === element).length);
});
return count;
}
console.log(reducer([1, 2, 3, 5, 2, 8, 9, 2]));
// Map(6) {1 => 1, 2 => 3, 3 => 1, 5 => 1, 8 => 1, …}
আপনি জাভাস্ক্রিপ্ট অ্যারে দৈর্ঘ্যের সম্পত্তি ব্যবহার করতে পারেন:
var myarray = [];
var count = myarray.length;//return 0
myarray = [1,2];
count = myarray.length;//return 2