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

时间:2012-08-30 06:58:56

标签: javascript jquery

您能否帮我找到相同文件名的no.of图片

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

这里我在阵列中有7张图片...... 我需要像......一样计算。

               Cat:1   
               Parrot :2
               Penguin:1 

请给我建议

谢谢, 拉哈西克哈

3 个答案:

答案 0 :(得分: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):

enter image description here

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

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

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

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

当你有一个很长的计算迭代时间,并且你想只做一次迭代时,通常会使用这种结构。

关于i--的含义,请阅读this

i-->0可以理解为:

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

答案 1 :(得分: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);          
});

DEMO

答案 2 :(得分: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/