জাভাস্ক্রিপ্টে একটি অ্যারেতে সদৃশ মান কীভাবে গণনা করা যায়


101

বর্তমানে, আমি এর মতো একটি অ্যারে পেয়েছি:

var uniqueCount = Array();

কয়েক পদক্ষেপের পরে, আমার অ্যারে দেখতে এমন দেখাচ্ছে:

uniqueCount = [a,b,c,d,d,e,a,b,c,f,g,h,h,h,e,a];

অ্যারেতে কয়টি, বি, সি রয়েছে তা আমি কীভাবে গণনা করব? আমি এর মতো ফলাফল পেতে চাই:

a = 3
b = 1
c = 2
d = 2

ইত্যাদি



@ নির্ক আমি অনুমান করি যে মিউজিকাল_কোডারটি একটি মানচিত্রকে বোঝানো হয়েছে {}, কার্যকরী প্রোগ্রামিং নয় map
ম্যাট বল

উত্তর:


28

function count() {
    array_elements = ["a", "b", "c", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];

    array_elements.sort();

    var current = null;
    var cnt = 0;
    for (var i = 0; i < array_elements.length; i++) {
        if (array_elements[i] != current) {
            if (cnt > 0) {
                document.write(current + ' comes --> ' + cnt + ' times<br>');
            }
            current = array_elements[i];
            cnt = 1;
        } else {
            cnt++;
        }
    }
    if (cnt > 0) {
        document.write(current + ' comes --> ' + cnt + ' times');
    }

}

count();

ডেমো ফিডল

অপারেশনটি করতে আপনি উচ্চ-অর্ডার ফাংশনগুলিও ব্যবহার করতে পারেন। এই উত্তর দেখুন


4
অতিরিক্ত যদি লুপের পরে বিবৃতি অপ্রয়োজনীয় হয় ... কেবল ব্যবহার করুন for (var i = 0; i <= array_elements.length; i++) {বা <=পরিবর্তে <
EmmaGamma

হাই @ বিন, সম্ভবত আপনি এখানে আমাকে সাহায্য করতে পারেন? stackoverflow.com/questions/57819850/...
SMPLYJR

326
var counts = {};
your_array.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });

9
এটি অবশ্যই সহজ উত্তর
জোশ বিম

4
(গণনা [এক্স] || 0) +1 কীভাবে এটি গণনা দিচ্ছে?
jsduniya

7
@ সিডভাল্ক: এক্সপ্রেশনটি সেট করা থাকলে counts[x] || 0এর মান প্রদান করে counts[x], অন্যথায় 0। তারপরে একটি যুক্ত করুন এবং এটি আবার বস্তুতে সেট করুন এবং গণনাটি সম্পন্ন হবে।
কনস্টান্টিনিয়াস

4
@ শীট জেএস যদি আপনি ভাবছেন যে ডাউনটা কেন - এটি আমার ছিল; আমি মোবাইলে ব্রাউজ করছিলাম, এবং ডাব্লু / ও বাস্তবে লক্ষ্য করে বোতামটি ক্লিক করেছি। একবার আমি জানতে পারলাম ফিরে যেতে খুব দেরি হয়েছিল। তার জন্য ক্ষমা চেয়েছি, উত্তরটি খুব ভাল। আপনি যদি এটি সম্পাদনা করতে চান তবে আমি বিপরীতে খুশি হব।
টডর মিনাকভ

4
এছাড়াও সাথে reduce:var counts = your_array.reduce((map, val) => {map[val] = (map[val] || 0)+1; return map}, {} );
আলবার্তো 89

71

এটার মতো কিছু:

uniqueCount = ["a","b","c","d","d","e","a","b","c","f","g","h","h","h","e","a"];
var count = {};
uniqueCount.forEach(function(i) { count[i] = (count[i]||0) + 1;});
console.log(count);

আপনি যদি পুরানো ব্রাউজারগুলিতে এটি ভাঙতে না চান তবে forEach এর পরিবর্তে লুপের জন্য একটি সাধারণ ব্যবহার করুন।


4
@ ওয়েবে_দেব তিনি একটি সংঘবদ্ধ অ্যারে অবজেক্ট তৈরি করেন যার নাম রয়েছে যা অ্যারের প্রতিটি অনন্য উপাদানের জন্য একটি মূল মান জুটি রাখবে, যেখানে কীটি অনন্য উপাদান মান এবং মানটি গণনা। তিনি অ্যারের উপরে পুনরাবৃত্তি করেন এবং প্রতিটি মানের জন্য হয় হয় মান বাড়িয়ে দেয় বা মূল মান জুটি তৈরি করে (অস্তিত্বহীন কীটির মানটি নির্ধারিত হয় না কেন || বা অপারেটরের পরিবর্তে শূন্য নেয় এবং 1 যোগ করে)
রোবসারব

@neelmeg হয়তো "forEach" এর জন্য সমস্ত পরামিতি লিখলে বুঝতে আরও সহায়তা করে ("আমি" প্রতিটি অ্যারের মান এবং এটির সূচক নয়):uniqueCount.forEach(function(value, index) { count[value] = (count[value] || 0) + 1; });
পেড্রো

অতিরিক্ত পদক্ষেপ এবং মোট গণনা অনুসারে বাছাই করার ভাল উপায় কী হবে?
কাঁপানো

38

আমি এই (খুব পুরানো) প্রশ্ন জুড়ে হোঁচট খেয়েছি। মজার বিষয় হল সবচেয়ে সুস্পষ্ট এবং মার্জিত সমাধান ( ইমো ) অনুপস্থিত: অ্যারে.প্রোটোটাইপ.ড্রেস (...) । সমস্ত বড় ব্রাউজারগুলি এই বৈশিষ্ট্যটিকে প্রায় 2011 (আইই) বা তারও আগের (অন্যান্য সমস্ত) থেকে সমর্থন করে:

var arr = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
var map = arr.reduce(function(prev, cur) {
  prev[cur] = (prev[cur] || 0) + 1;
  return prev;
}, {});

// map is an associative array mapping the elements to their frequency:
document.write(JSON.stringify(map));
// prints {"a": 3, "b": 2, "c": 2, "d": 2, "e": 2, "f": 1, "g": 1, "h": 3}


11

হ্রাস অ্যারে ফাংশনের উপর ভিত্তি করে একক লাইন

const uniqueCount =  ["a", "b", "c", "d", "d", "e", "a", "b", "c", "f", "g", "h", "h", "h", "e", "a"];
const distribution = uniqueCount.reduce((acum,cur) => Object.assign(acum,{[cur]: (acum[cur] || 0)+1}),{});
console.log(JSON.stringify(distribution,null,2));


আমি শুধু বুঝতে পারেন যে @ isnot2bad ( stackoverflow.com/a/32886673/621058 ) খনি হিসাবে প্রায় একই। আমি কেবল চর্বিযুক্ত তীর ফাংশন এবং ধ্রুবকগুলি ব্যবহার করতে চাই
ডিনিগো



5

// Initial array
let array = ['a', 'b', 'c', 'd', 'd', 'e', 'a', 'b', 'c', 'f', 'g', 'h', 'h', 'h', 'e', 'a'];

// Unique array without duplicates ['a', 'b', ... , 'h']
let unique = [...new Set(array)];

// This array counts duplicates [['a', 3], ['b', 2], ... , ['h', 3]] 
let duplicates = unique.map(value => [value, array.filter(str => str === value).length]);

5

কেউ প্রতিক্রিয়া করছে না বলে মনে হয় যে এটির জন্য Map()বিল্ট-ইন ব্যবহার করা হচ্ছে, যা আমার সাথে যেতে সম্মিলিত হয়ে থাকে Array.prototype.reduce():

const data = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
const result = data.reduce((a, c) => a.set(c, (a.get(c) || 0) + 1), new Map());
console.log(...result);

তবে, পুরানো ব্রাউজারগুলিতে এটি ব্যবহার করতে চাইলে আপনাকে পলিফিলMap() করতে হবে।


আপনি কীভাবে এটি কাজ করছেন তা একটু গভীরভাবে ব্যাখ্যা করতে পারেন? (বিশেষভাবে সেট / অংশ পান) আমি হ্রাসকারীটিকে একটি ক্রিয়াতে ভাঙ্গার চেষ্টা করেছি কিন্তু আমি "পেয়েছি" প্রতিক্রিয়া হিসাবে ফাংশন নয়।
এন্টোইন নেদেলেক

ঠিক আছে getএবং setফাংশন Mapঅবজেক্ট থেকে আসছে । তবে প্রাথমিক সংগ্রহকারী কোনও মানচিত্রের অবজেক্ট নয়, তাই হ্রাসকারী সংস্করণটি কেন গ্রহণ করবে?
এন্টোইন নেদেলেক

@AntoineNedelec প্রাথমিক মান হয় একটি নতুন Mapবস্তু; হ্রাস দ্বিতীয় যুক্তি দেখুন। Map.prototype.setমানচিত্র অবজেক্ট, এবং Map.prototype.getফেরত দেয় undefinedবা এতে কী সরবরাহ করা হয় তার মান দেয়। এটি আমাদের প্রতিটি অক্ষরের বর্তমান গণনা পেতে দেয় (বা 0যদি অপরিবর্তিত থাকে), তারপরে একে একে বৃদ্ধি করে তারপরে সেই চিঠির গণনাটিকে নতুন গণিতে সেট করুন যা মানচিত্রটি ফেরত দেয় এবং নতুন সংযোজকের মান হয়ে যায়।
এেন্ড্রু

4

আপনার একটি অবজেক্ট থাকতে পারে যাতে গণনা রয়েছে। তালিকার উপরে চলে যান এবং প্রতিটি উপাদানটির জন্য গণনা বৃদ্ধি করুন:

var counts = {};

uniqueCount.forEach(function(element) {
  counts[element] = (counts[element] || 0) + 1;
});

for (var element in counts) {
  console.log(element + ' = ' + counts[element]);
} 

কেন আপনি এই শর্ত স্থাপন করলেন counts[element] || 0?
জিজ্ঞাসা করুন

সম্পত্তির কোনও মূল্য নেই বলে প্রথমবারের মতো counts[element]রিটার্ন অ্যাক্সেস করার সময় undefined। এরপরে যদি আপনি যুক্ত করার চেষ্টা করেন তবে undefined + 1আপনি NaN দিয়ে শেষ করবেন । (count[element] || 0)প্রতিস্থাপন করবে undefinedসঙ্গে 0তাই যোগ 1উৎপন্ন 1পরিবর্তে NaN। ECMAScript 2020 এ নালিশ কোলেসিং অপারেটর যুক্ত করে ??যা একই কাজ করে তবে এটি আরও স্পষ্ট করে যে প্রথমটি যখন undefined(বা null) হয় তখন এটি দ্বিতীয় মানটি ব্যবহার করে । যে সংস্করণ হবে (counts[element] ?? 0) + 1
এনক্রন

4

আপনি প্রতিটি জন্য / যখন লুপগুলি ব্যবহার না করে এটি সমাধান করতে পারেন।

function myCounter(inputWords) {        
    return inputWords.reduce( (countWords, word) => {
        countWords[word] = ++countWords[word] || 1;
        return countWords;
    }, {});
}

আশা করি এটি আপনাকে সাহায্য করবে!



3

আপনি এর মতো কিছু করতে পারেন:

uniqueCount = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
var map = new Object();

for(var i = 0; i < uniqueCount.length; i++) {
 if(map[uniqueCount[i]] != null) {
    map[uniqueCount[i]] += 1;
} else {
    map[uniqueCount[i]] = 1;
    }
}

এখন আপনার কাছে সমস্ত অক্ষর গণনা সহ একটি মানচিত্র রয়েছে


1
var uniqueCount = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];
// here we will collect only unique items from the array
var uniqueChars = [];

// iterate through each item of uniqueCount
for (i of uniqueCount) {
// if this is an item that was not earlier in uniqueCount, 
// put it into the uniqueChars array
  if (uniqueChars.indexOf(i) == -1) {
    uniqueChars.push(i);
  } 
}
// after iterating through all uniqueCount take each item in uniqueChars
// and compare it with each item in uniqueCount. If this uniqueChars item 
// corresponds to an item in uniqueCount, increase letterAccumulator by one.
for (x of uniqueChars) {
  let letterAccumulator = 0;
  for (i of uniqueCount) {
    if (i == x) {letterAccumulator++;}
  }
  console.log(`${x} = ${letterAccumulator}`);
}

এটি আপডেট করার জন্য ধন্যবাদ, যারা তাদের শুরুতে অনেক বেশি সহায়ক।
নিয়মিত জো

1

বর্ণমালা সম্বলিত একটি অ্যারেতে সদৃশ:

var arr = ["a", "b", "a", "z", "e", "a", "b", "f", "d", "f"],
  sortedArr = [],
  count = 1;

sortedArr = arr.sort();

for (var i = 0; i < sortedArr.length; i = i + count) {
  count = 1;
  for (var j = i + 1; j < sortedArr.length; j++) {
    if (sortedArr[i] === sortedArr[j])
      count++;
  }
  document.write(sortedArr[i] + " = " + count + "<br>");
}

সংখ্যাযুক্ত একটি অ্যারেতে সদৃশ:

var arr = [2, 1, 3, 2, 8, 9, 1, 3, 1, 1, 1, 2, 24, 25, 67, 10, 54, 2, 1, 9, 8, 1],
  sortedArr = [],
  count = 1;
sortedArr = arr.sort(function(a, b) {
  return a - b
});
for (var i = 0; i < sortedArr.length; i = i + count) {
  count = 1;
  for (var j = i + 1; j < sortedArr.length; j++) {
    if (sortedArr[i] === sortedArr[j])
      count++;
  }
  document.write(sortedArr[i] + " = " + count + "<br>");
}


1

var testArray = ['a', 'b', 'c', 'd', 'd', 'e', ​​'a', 'b', 'c', 'f', 'g', 'h ',' এইচ ',' এইচ ',' ই ',' এ '];

var newArr = [];
testArray.forEach((item) => {
    newArr[item] = testArray.filter((el) => {
            return el === item;
    }).length;
})
console.log(newArr);



1

অ্যারে হ্রাস পদ্ধতি ব্যবহার করে এটি জাভাস্ক্রিপ্টে সহজ:

const arr = ['a','d','r','a','a','f','d'];
const result =  arr.reduce((json,val)=>({...json, [val]:(json[val] | 0) + 1}),{});
console.log(result)
//{ a:3,d:2,r:1,f:1 }


0

ভাল উত্তরের সংমিশ্রণ:

var count = {};
var arr = ['a', 'b', 'c', 'd', 'd', 'e', 'a', 'b', 'c', 'f', 'g', 'h', 'h', 'h', 'e', 'a'];
var iterator = function (element) {
    count[element] = (count[element] || 0) + 1;
}

if (arr.forEach) {
    arr.forEach(function (element) {
        iterator(element);
    });
} else {
    for (var i = 0; i < arr.length; i++) {
        iterator(arr[i]);
    }
}  

আশা করি এটি সহায়ক।


0
public class CalculateCount {
public static void main(String[] args) {
    int a[] = {1,2,1,1,5,4,3,2,2,1,4,4,5,3,4,5,4};
    Arrays.sort(a);
    int count=1;
    int i;
    for(i=0;i<a.length-1;i++){
        if(a[i]!=a[i+1]){
            System.out.println("The Number "+a[i]+" appears "+count+" times");
            count=1;                
        }
        else{
            count++;
        }
    }
    System.out.println("The Number "+a[i]+" appears "+count+" times");

}   

}


আপনি কি এর চারপাশে কিছু প্রসঙ্গ যুক্ত করতে পারেন?
মিস্টার ইতিবাচক

0

অ্যারে.ম্যাপ ব্যবহার করে আমরা লুপটি হ্রাস করতে পারি, এটি জেএসফিডেলে দেখুন

function Check(){
    var arr = Array.prototype.slice.call(arguments);
    var result = [];
    for(i=0; i< arr.length; i++){
        var duplicate = 0;
        var val = arr[i];
        arr.map(function(x){
            if(val === x) duplicate++;
        })
        result.push(duplicate>= 2);
    }
    return result;
}

পরীক্ষা করার জন্য:

var test = new Check(1,2,1,4,1);
console.log(test);

0

var string = ['a','a','b','c','c','c','c','c','a','a','a'];

function stringCompress(string){

var obj = {},str = "";
string.forEach(function(i) { 
  obj[i] = (obj[i]||0) + 1;
});

for(var key in obj){
  str += (key+obj[key]);
}
  console.log(obj);
  console.log(str);
}stringCompress(string)

/*
Always open to improvement ,please share 
*/


0

উদাহরণস্বরূপ একটি ফাইল তৈরি করুন demo.jsএবং নোড দিয়ে এটি কনসোলে চালান demo.jsএবং আপনি ম্যাট্রিক্স আকারে উপাদানগুলির উপস্থিতি পাবেন।

var multipleDuplicateArr = Array(10).fill(0).map(()=>{return Math.floor(Math.random() * Math.floor(9))});
console.log(multipleDuplicateArr);

var resultArr = Array(Array('KEYS','OCCURRENCE'));

for (var i = 0; i < multipleDuplicateArr.length; i++) {
  var flag = true;
  for (var j = 0; j < resultArr.length; j++) {
     if(resultArr[j][0] == multipleDuplicateArr[i]){
       resultArr[j][1] = resultArr[j][1] + 1;
       flag = false;
      }
  }
  if(flag){
    resultArr.push(Array(multipleDuplicateArr[i],1));
  }
}

console.log(resultArr);

আপনি নীচের মত কনসোলে ফলাফল পাবেন:

[ 1, 4, 5, 2, 6, 8, 7, 5, 0, 5 ] . // multipleDuplicateArr
[ [ 'KEYS', 'OCCURENCE' ],        // resultArr
  [ 1, 1 ],
  [ 4, 1 ],
  [ 5, 3 ],
  [ 2, 1 ],
  [ 6, 1 ],
  [ 8, 1 ],
  [ 7, 1 ],
  [ 0, 1 ] ]

0

দ্রুততম উপায়:

গার্হস্থ্য জটিলতা হ'ল ও (এন)।

function howMuchIsRepeated_es5(arr) {
	const count = {};
	for (let i = 0; i < arr.length; i++) {
		const val = arr[i];
		if (val in count) {
			count[val] = count[val] + 1;
		} else {
			count[val] = 1;
		}
	}

	for (let key in count) {
		console.log("Value " + key + " is repeated " + count[key] + " times");
	}
}

howMuchIsRepeated_es5(['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a']);

সংক্ষিপ্ততম কোড:

ES6 ব্যবহার করুন।

function howMuchIsRepeated_es6(arr) {
	// count is [ [valX, count], [valY, count], [valZ, count]... ];
	const count = [...new Set(arr)].map(val => [val, arr.join("").split(val).length - 1]);

	for (let i = 0; i < count.length; i++) {
		console.log(`Value ${count[i][0]} is repeated ${count[i][1]} times`);
	}
}

howMuchIsRepeated_es6(['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a']);


0
var arr = ['a','d','r','a','a','f','d'];  

//call function and pass your array, function will return an object with array values as keys and their count as the key values.
duplicatesArr(arr);

function duplicatesArr(arr){
    var obj = {}
    for(var i = 0; i < arr.length; i++){
        obj[arr[i]] = [];
        for(var x = 0; x < arr.length; x++){
            (arr[i] == arr[x]) ? obj[arr[i]].push(x) : '';
        }
        obj[arr[i]] = obj[arr[i]].length;
    }

    console.log(obj);
    return obj;
}

0

arrকী হিসাবে অনন্য সেটটি ধরে রাখতে কোনও বস্তু ঘোষণা করুন । জনপূর্ণ করুন arrমানচিত্র ব্যবহার একবার অ্যারে মাধ্যমে looping দ্বারা। কীটি যদি আগে না পাওয়া যায় তবে কীটি যুক্ত করুন এবং শূন্যের মান নির্ধারণ করুন। প্রতিটি পুনরাবৃত্তি বৃদ্ধির উপর কী এর মান।

প্রদত্ত পরীক্ষাআরে:

var testArray = ['a','b','c','d','d','e','a','b','c','f','g','h','h','h','e','a'];

সমাধান:

var arr = {};
testArray.map(x=>{ if(typeof(arr[x])=="undefined") arr[x]=0; arr[x]++;});

JSON.stringify(arr) আউটপুট হবে

{"a":3,"b":2,"c":2,"d":2,"e":2,"f":1,"g":1,"h":3}

Object.keys(arr) ফিরে আসবে ["a","b","c","d","e","f","g","h"]

যেকোন আইটেমের উপস্থিতি খুঁজে বের করার জন্য b খ arr['b']আউটপুট দেয়2


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

0

ব্যবহার:

wrap.common.getUniqueDataCount(, columnName);

কোড:

function getUniqueDataCount(objArr, propName) {
        var data = [];
        objArr.forEach(function (d, index) {
            if (d[propName]) {
                data.push(d[propName]);
            }
        });

        var uniqueList = [...new Set(data)];

        var dataSet = {};
        for (var i=0; i < uniqueList.length; i++) {
            dataSet[uniqueList[i]] = data.filter(x => x == uniqueList[i]).length;
        }
        
        return dataSet;
    }

স্নিপেট

var data= [
          {a:'you',b:'b',c:'c',d:'c'},
          {a: 'you', b: 'b', c: 'c', d:'c'},
          {a: 'them', b: 'b', c: 'c', d:'c'},
          {a: 'them', b: 'b', c: 'c', d:'c'},
          {a: 'okay', b: 'b', c: 'c', d:'c'},
          {a: 'okay', b: 'b', c: 'c', d:'c'},
          ];
          
  console.log(getUniqueDataCount(data, 'a'));       
  
  function getUniqueDataCount(objArr, propName) {
        var data = [];
        objArr.forEach(function (d, index) {
            if (d[propName]) {
                data.push(d[propName]);
            }
        });

        var uniqueList = [...new Set(data)];

        var dataSet = {};
        for (var i=0; i < uniqueList.length; i++) {
            dataSet[uniqueList[i]] = data.filter(x => x == uniqueList[i]).length;
        }

        return dataSet;
    }

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.