您能否帮我找到相同文件名的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
请给我建议
谢谢, 拉哈西克哈
答案 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
如果你做console.log(count),你会在控制台上看到这个(大多数浏览器上的Ctrl + Uppercase + i):
关于i的编辑 - >根据评论要求:
for (var i=images.length; i-->0;) {
与
有关for (var i=0; i<images.length; i++) {
但是在其他方向上并且只调用一次数组的长度(因此速度非常快,在这种情况下不是明显的方式)。
当你有一个很长的计算迭代时间,并且你想只做一次迭代时,通常会使用这种结构。
关于i--
的含义,请阅读this。
i-->0
可以理解为:
答案 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);
});
答案 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]]);