簡體   English   中英

計算事件的發生並將結果存儲在使用javascript的鍵值對中

[英]calculate the occurence and store the result in a key value-pair using javascript

我需要計算名稱在數組中的出現。

var eachAuthorData = ["bob","joke","hello","stack","stack","ok","joke","bob"];

我可以通過使用for循環來做到這一點,並得到這樣的結果

{bob: 2, joke: 2, hello: 1, stack: 2, ok: 1}

但結果只能是使用

counts["bob"]

我不僅需要知道每個名字的出現。 但還需要知道數組eachAuthorData中有多少個不同的名稱我如何在eachAuthorData中找到bob我只需要使用一次名稱

如果以數組開頭:

var eachAuthorData = ["bob","joke","hello","stack","stack","ok","joke","bob"];

並且您想知道數組中每個名稱有多少個,以及有多少個唯一的字符串,可以這樣做:

var counts = {}, i, item, uniques = 0;
for (i = 0; i < eachAuthorData.length; i++) {
    item = eachAuthorData[i];
    if (!counts.hasOwnProperty(item)) {
        counts[item] = 1;
        ++uniques;
    } else {
        ++counts[item];
    }
}

這將產生如下counts的輸出:

{bob: 2, joke: 2, hello: 1, stack: 2, ok: 1}

並且,由於您在注釋中提出了其他一些問題,因此我添加了變量uniques ,該變量為您提供了總的唯一字符串數。

並且,您將訪問任何單個計數,如下所示:

var cnt = counts["bob"];

或者,如果所需的鍵在名為key的變量中,則可以使用:

var cnt = counts[key];

如果要迭代所有唯一字符串的所有計數,則可以這樣進行:

for (var item in counts) {
    // item is the key
    // counts[item] is the count
    console.log("counts[" + item + "] = " + counts[item]);
}

工作演示: http : //jsfiddle.net/jfriend00/eJyAg/


如果要獲取counts對象中鍵的列表(例如,唯一字符串),可以使用:

var keys = Object.keys(counts);

Object.keys()需要IE9或更高版本,或者如果您想與IE的較早版本進行互操作,請在此處使用polyfill。

我認為您應該具有:

var eachAuthorData = ["bob","joke","hello","stack","stack","ok","joke","bob"];

這樣做計算:

var toMatch, i, count;

toMatch = "bob";
count   = 0;

for( i=0 ; i<eachAuthorData.length ; ++i ){
  if( eachAuthorData[i] == toMatch ){
    ++count;
  }
}

console.log("The element "+ toMatch +" is counted "+ count +" times!");

試試這個

var tempObject = new Object();
function count() {
    array_elements = ["bob","joke","hello","stack","stack","ok","joke","bob"];

    array_elements.sort();

    var current = null;
    var cnt = 0;
    for (var i = 0; i < array_elements.length; i++) {
        if (array_elements[i] != current) {
            if (cnt > 0) {
                tempObject[current]=cnt;
                console.log(current + ' comes --> ' + cnt + ' times<br>');
            }
            current = array_elements[i];
            cnt = 1;
        } else {
            cnt++;
        }
    }
    if (cnt > 0) {
        console.log(current + ' comes --> ' + cnt + ' times');
       tempObject[current]=cnt;
    }

}

count();
console.log(JSON.stringify(tempObject));

大概你的意思是這樣的數組:

var data = ["bob","joke","hello","stack","stack","ok","joke","bob"];

由於其他人走了明顯的路,我將發布一些更健壯的方法,以說明數據數組已刪除成員的可能性(即稀疏):

function countMembers(dataArray) {

  for (var i=0, iLen=dataArray.length, o={}, item; i<iLen; i++) {
    item = dataArray[i];

    if (dataArray.hasOwnProperty(i)) {
       if (o.hasOwnProperty(item)) {
          ++o[item];
       } else {
          o[item] = 1;
       }
    } 
  }
  return o;
}

鑒於:

["bob","joke",,,,"hello","stack","stack","ok","joke","bob"];

其他將包括一個undefined: 3成員undefined: 3 ,但是上面沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM