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; } |
然后你就有了,例如
演示:http://jsfiddle.net/ts6gy/
如果您执行console.log(count),您将在控制台上看到此消息(大多数浏览器上为ctrl+uppercase+i):
根据注释中的要求编辑关于i->
1 | for (var i=images.length; i-->0;) { |
做同样的事
1 | for (var i=0; i<images.length; i++) { |
但在另一个方向上,只调用一次数组的长度(因此速度稍快,在本例中不明显)。
当需要计算的迭代长度很长,并且只想计算一次时,通常使用此构造。
关于
- 递减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/