关于javascript:如何查找具有相同文件名的图像数?

How to find the count of images that have same file name?

你能帮我找到相同文件名的图片编号吗?

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

这里我有7张图像在阵列中…我需要像……

1
2
3
               Cat:1  
               Parrot :2
               Penguin:1

请给我建议

谢谢,拉贾耶克哈尔


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

1
2
3
4
5
6
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):

enter image description here

根据注释中的要求编辑关于i->

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

做同样的事

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

但在另一个方向上,只调用一次数组的长度(因此速度稍快,在本例中不明显)。

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

关于i--的含义,请阅读以下内容。

i-->0可以理解为:

  • 递减I
  • 检查递减前i的值是否严格为正(因此我在循环中使用的值是正或零)


不确定效率,但应该这样做:

1
2
3
4
5
6
7
8
9
10
11
12
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);          
});

演示


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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/