25

私は次のような配列を持っています、

var arr = ['ab','pq','mn','ab','mn','ab']

期待される結果

arr['ab'] = 3
arr['pq'] = 1
arr['mn'] = 2

次のように試しました、

$.each(arr, function (index, value) {
    if (value) 
        arr[value] = (resultSummary[value]) ? arr[value] + 1 : 1;
});

console.log(arr.join(','));
4

9 に答える 9

54

このタスクにjQueryを使用する必要はありません—この例では、配列内のすべての異なる要素の出現量を使用してオブジェクトを構築します。O(n)

var occurrences = { };
for (var i = 0, j = arr.length; i < j; i++) {
   occurrences[arr[i]] = (occurrences[arr[i]] || 0) + 1;
}

console.log(occurrences);        // {ab: 3, pq: 1, mn: 2}
console.log(occurrences['mn']);  // 2

フィドルの例


Array.reduceを使用して同じ結果を取得し、for-loop

var occurrences = arr.reduce(function(obj, item) {
  obj[item] = (obj[item] || 0) + 1;
  return obj;
}, {});

console.log(occurrences);        // {ab: 3, pq: 1, mn: 2}
console.log(occurrences['mn']);  // 2

フィドルの例

于 2012-07-25T12:07:25.937 に答える
6

これは、配列内の同じ値を持つオカレンスをカウントする最も簡単な方法だと思います。

var a = [true, false, false, false];
a.filter(function(value){
    return value === false;
}).length                                      
于 2014-10-16T08:36:37.950 に答える
5

ライブラリを必要とするソリューションが必要なく、レガシーJavaScriptをサポートする必要がない場合:

var report = {};

arr.forEach(function(el){
  report[el] = report[el] + 1 || 1;
});

または、jQueryを使用してそれを実行したい場合:

var report = {};

$.each(arr,function(i,el){
  report[el] = report[el] + 1 || 1;
});

これは、短絡ロジックを使用して、条件をテストし、値を設定します。私はそれがjavascriptを行うためのかなり簡潔で読みやすい方法だと思います。

console.log( report );
于 2013-12-20T21:13:22.267 に答える
2

$.grepを試してください

例:

var arr = ['ab','pq','mn','ab','mn','ab']

jQuery.grep(arr, function(a){
   return a == 'ab'
}).length // 3

ie8をサポートする必要がない場合。

['ab','pq','mn','ab','mn','ab'].filter(function(value){
    return value == 'ab'
}).length // 3
于 2015-11-04T09:06:44.890 に答える
1
var result = {};
function count(input){
  var tmp = 0;
  if(result.hasOwnProperty(input)){
     tmp = result[input];
     result[input]=tmp+1;
  }else{
    result[input]=1;
  }
}

上記の関数は、配列内の同じ文字列の数を数えるのに役立ちます。

于 2012-07-25T12:10:49.720 に答える
1

シュガーライブラリを使用している場合は、次のようになります。

arr.count('ab');

デモ

配列カウントAPIを参照してください。

于 2012-07-25T12:16:57.680 に答える
0

これはあなたがやろうとしていることでしょうか?

$.each(arr, function(index, value) {
    if (!resultSummary[value]){
        resultSummary[value] = 0;
    }
    resultSummary[value] += 1;
});

このコードは、配列内の各文字列の出現をカウントし、結果をに格納しますresultsArray

于 2012-07-25T12:14:23.863 に答える
0

var arr = ['ab','pq','mn','ab','mn','ab']



function getCount(arr,val)
{
    var ob={};
    var len=arr.length;
    for(var k=0;k<len;k++)
    {
        if(ob.hasOwnProperty(arr[k]))
        {
            ob[arr[k]]++;
            continue;
        }
        ob[arr[k]]=1;
    }
    return ob[val];
}



//run test
alert(getCount(arr,'ab'));//3

デモ: http: //jsfiddle.net/dmx4y/2/

于 2012-07-25T12:35:44.177 に答える
0
var arr = ['ab','pq','mn','ab','mn','ab'];
var result = { };
   for(i=0;i<arr.length;++i) 
   {
       if(!result[arr[i]])
           result[arr[i]]=0;
       ++result[arr[i]];
   }

for (var i in result){
console.log(i+":"+result[i]);
} 
于 2015-05-02T13:06:19.187 に答える