3

你能帮我找到相同文件名的图像数量吗?

 var images =["Cat.png", "Cock.png","Dog.png","Parrot.png","Penguin.png",
              "Rabbit.png","Parrot.png"];

在这里,我在数组中有 7 个图像...我需要像 ..

               Cat:1   
               Parrot :2
               Penguin:1 

请给我建议

谢谢, 拉贾塞卡

4

3 回答 3

4

通常的解决方案是使用对象作为映射来建立键(文件名)和计数之间的链接:

var count = {};
for (var i=images.length; i-->0;) {
   var key = images[i].split(".")[0]; // this makes 'Parrot' from 'Parrot.png'
   if (count[key]) count[key]++;
   else count[key] = 1;
}

然后你有,例如count['Parrot'] == 2

演示:http: //jsfiddle.net/tS6gY/

如果你执行 console.log(count),你会在控制台上看到这个(在大多数浏览器上是 Ctrl+Uppercase+i):

在此处输入图像描述

根据评论中的要求编辑 i--> :

for (var i=images.length; i-->0;) {

做的事情比

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

但在其他方向上,并且只调用数组长度的一次(因此速度非常快,在这种情况下不是以明显的方式)。

当您需要计算很长的迭代长度并且您只想执行一次时,通常会使用此构造。

关于的意思i--,读到这里

i-->0可以读作:

  • 递减我
  • 检查减量前 i 的值是否严格为正(因此循环中使用的 i 为正或零)
于 2012-08-30T07:05:47.033 回答
1

不确定效率,但这应该可以:

var images =["Cat.png", "Cock.png","Dog.png","Parrot.png","Penguin.png","Rabbit.png","Parrot.png"];

images.forEach(function(img){
    var count = 0;
    images.forEach(function(image, i){
        if(img === image){
            delete images[i];
            count++;
        }
    });
    console.log(img, count);          
});

演示

于 2012-08-30T07:13:40.523 回答
0

您可以在数组中保留唯一键并使用另一个数组来计算频率:

var images =["Cat.png", "Cock.png","Dog.png","Parrot.png","Penguin.png","Rabbit.png","Parrot.png"]; 
var counts = [];
var keys = [];

for (i = 0; i < images.length; i++){
    if (!counts[images[i]]) {
        counts[images[i]] = 0;
        keys.push(images[i]);
    }
    counts[images[i]]++;
}

for (i = 0; i < keys.length; i++) alert(keys[i] + " : " + counts[keys[i]]);
​

这是一个演示:http: //jsfiddle.net/e5zFC/1/

于 2012-08-30T07:09:56.820 回答