计算一个数组中有多少字符串在同一数组中重复
Count how many strings in an array have duplicates in the same array
可能重复:
数组值计数javascript
我有一个数组,它包含几个重复项,我试图实现的是计算每个唯一字符串在这个数组中有多少重复项。
阵列看起来像这个
array = ['aa','bb','cc','aa','ss','aa','bb'];
因此,我想做一些类似的事情
if (xWordOccurrences >= 5) {
// do something
}
但我不确定该如何编码。我在想,用每个唯一的字符串创建一个对象,然后在原始数组中循环,将每个字符串与它的对象匹配,并将其数字递增1,然后在对象上循环,看看哪些单词重复最多。。。
但这似乎是一种过于复杂的方法。
您可以使用一个具有数组值键的对象,并执行类似的操作
// count everything
function getCounts(arr) {
var i = arr.length, // var to loop over
obj = {}; // obj to store results
while (i) obj[arr[--i]] = (obj[arr[i]] || 0) + 1; // count occurrences
return obj;
}
// get specific from everything
function getCount(word, arr) {
return getCounts(arr)[word] || 0;
}
getCount('aa', ['aa','bb','cc','aa','ss','aa','bb']);
// 3
如果你只想得到一个,那么使用getCounts
的修改版本会更有效率,它看起来类似于getCount
,我称之为getCount2
function getCount2(word, arr) {
var i = arr.length, // var to loop over
j = 0; // number of hits
while (i) if (arr[--i] === word) ++j; // count occurance
return j;
}
getCount2('aa', ['aa','bb','cc','aa','ss','aa','bb']);
// 3
试试这个函数:
var countOccurrences = function(arr,value){
var len = arr.length;
var occur = 0;
for(var i=0;i<len;i++){
if(arr[i]===value){
occur++;
}
}
return occur;
}
var count = countOccurrences(['aaa','bbb','ccc','bbb','ddd'],'bbb'); //2
如果您愿意,还可以将此功能添加到Array原型中:
Array.prototype.countOccurrences = function(value){
var len = this.length;
var occur = 0;
for(var i=0;i<len;i++){
if(this[i]===value){
occur++;
}
}
return occur;
}
构建一个具有命名属性的对象怎么样?
var array = ['aa','bb','cc','aa','ss','aa','bb'];
var summary = {};
var item = '';
for ( i in array){
item = array[i];
if(summary[item]){
summary[item] += 1;
}
else{
summary[item] = 1;
}
}
console.log( summary );
摘要将包含这样的
{aa: 3, bb: 2, cc: 1, ss: 1}
然后可以对其进行迭代,然后根据需要对其进行排序。
最后,您可以使用summary[aa']
<script type="text/javascript">
var array = ['aa','bb','cc','aa','ss','aa','bb'];
var myMap = {};
for(i = 0; i < array.length; i++) {
var count = myMap[array[i]];
if(count != null) {
count++;
} else {
count = 1;
}
myMap[array[i]] = count;
}
// at this point in the script, the map now contains each unique array item and a count of its entries
</script>
希望这能解决的问题
var array = ['aa','bb','cc','aa','ss','aa','bb'];
var dups = {};
for (var i = 0, l = array.length; i < l; i++ ) {
dups[array[i]] = [];
}
for (str in dups) {
for (var i = 0, l = array.length; i < l; i++ ) {
if (str === array[i]) {
dups[str].push(str);
}
}
}
for (str in dups) {
console.log(str + ' has ' + (dups[str].length - 1) + ' duplicate(s)');
}
这个函数可以完成您需要的一切。
function countDupStr(arr, specifier) {
var count = {}, total = 0;
arr.forEach(function (v) {
count[v] = (count[v] || 0) + 1;
});
if(typeof specifier !== 'undefined') {
return count[specifier] - 1;
}
Object.keys(count).forEach(function (k) {
total += count[k] - 1;
});
return total;
}
数组中的每个值都会分配给count对象并递增。无论是否传递了说明符,函数都将返回该特定字符串的重复项或重复项总数。请注意,这种特殊的技术只适用于数组中的字符串强制值,因为Javascript只能按字符串对对象进行索引。
这意味着,在对象分配过程中,键将规范化为字符串,并且不能依赖于唯一性。也就是说,该函数将无法辨别3
和'3'
的重复之间的差异。举个例子,如果我要执行:
var o = {}, t = {};
o[t] = 1;
console.log(o);
代替t
使用的密钥最终将是t.toString()
,从而产生了{'[object Object]': 1}
这个可能令人惊讶的对象。只是在使用Javascript属性时需要记住的一点。
我看到了这篇关于它的帖子,也许它会有所帮助:
http://ryanbosinger.com/blog/2011/javascript-count-duplicates-in-an-array/
- 高亮显示与数组字符串一起使用时文本插件中断
- 从数组/字符串中删除所有小数和单个数字
- 使用Javascript regex替换“index”数组字符串
- 如何将复选框中的选中值收集为 javascript 数组/字符串
- 将数组数组字符串转换为 Javascript 数组数组的优雅方法
- 如何将数组字符串转换为数组
- 通过数组字符串访问JavaScript对象中的值
- Javascript数组字符串作为图像键
- Chrome和Firefox正在检索字符,而不是javascript中的数组字符串
- 如何在 JavaScript 函数中从 PHP end 传递数组字符串作为参数
- Jquery 如何检查数组字符串值是否在文本区域中
- 如何转换数组字符串
- JS数组字符串将名称修补到数组(对象)
- 在Javascript中从数组字符串中查找单个或多个值
- 如何将java数组字符串分配给javascript数组字符串
- 如何在javascript中将子数组字符串的数组转换为子数组的数组?
- 如何将字符串中的特殊值放入数组字符串
- 如何在JavaScript中给出RouteUrl中的数组字符串
- 在javascript的for循环中设置数组's字符串元素的长度为一个变量
- 如何从“数组字符串”中获取键值在javascript