3

同じファイル名の画像の数を見つける方法を教えてください。

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

ここに配列に7つの画像があります...私は次のように数える必要があります。

               Cat:1   
               Parrot :2
               Penguin:1 

提案をください

ありがとう、Rajasekhar

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++) {

ただし、他の方向では、配列の長さを1回だけ呼び出します(したがって、この場合は目立った方法ではなく、非常にわずかに高速です)。

この構成は、計算に長い反復の長さがあり、それを1回だけ実行したい場合によく使用されます。

の意味については、こちらi--をお読みください。

i-->0次のように読むことができます:

  • 減分i
  • デクリメント前の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 に答える