2017-10-28 81 views
0

所以我一直googling了很多,并尝试使用不同的过滤器阵列等,无济于事。查找和返回完全匹配(重复)在JavaScript数组

我有一个字符串数组,像这样:

var foo = ['1X31UX11','X3U11X1','33X11U12']; 

有没有一种方法来检查相互每个字符串数组中,如果有一个精确匹配(即字符以相同的顺序)它打印特定字符串发生多少次&也打印有问题的字符串?

+0

是的,这是可能的(实际上相当容易写自己) - 请显示你的尝试,并解释与t的问题下摆是 – UnholySheep

+0

预期结果是什么样子? – zer00ne

+0

这是一个中等大小的数据集w。 2-300个条目,所以我想收集一个数组或对象中的重复条目,如下所示: ['string 1':15次,'string 2:12 times,'string 3:8 times] – user2868900

回答

2

function arrayRepeats(array) { 
 
    var returnObject = {}; 
 
    for (var i = 0; i < array.length; i++) { 
 
     if (returnObject[array[i]]) { 
 
      returnObject[array[i]]++; 
 
     } else { 
 
      returnObject[array[i]] = 1; 
 
     } 
 
    } 
 
    return returnObject; 
 
} 
 

 
var foo = ['1X31UX11','X3U11X1','33X11U12']; 
 
console.log(arrayRepeats(foo)); 
 
var bar = [1, 1, 2, 1, 3, 1, 31, 3, 1, 5, 4, 1]; 
 
console.log(arrayRepeats(bar));

+0

Ah yes , 谢谢!现在它使很多完美!我在类似的方法,但几乎忘了else语句(使功能几乎没用) – user2868900

+0

@ user2868900你可以接受一个答案,以显示访问你的问题的人谁给你的答案 – zevee

1

使用Array#reduce收集每个字符串的出场数到一个对象:

var foo = ['1X31UX11','X3U11X1','33X11U12', '1X31UX11']; 
 

 
var result = foo.reduce(function(count, str) { 
 
    count[str] = (count[str] || 0) + 1; 
 
    
 
    return count; 
 
}, {}); 
 

 
console.log(result);