2014-01-25 45 views
0

我試圖顯示在一個更可讀的方式的陣列的內容,這是陣列:顯示號碼,如果在JavaScript陣列的每個項目

["malevolent", "pariah", "judicious", "pariah", "judicious"] 

我簡單地添加該數組到HTML元素顯示它,但我想這樣顯示:

malevolent, pariah x 2, judicious x2 

我該怎麼做?

+0

什麼是'x 2'? –

+0

這意味着pariah是數組中的兩倍 –

+0

只需計算數組中的元素:http://stackoverflow.com/q/5667888/218196。我假設你知道如何進行字符串連接並更改HTML元素的內容。 –

回答

1

這是很簡單的實際上是:

var myArray = new Array("a", "b", "c", "b", "a"); 
var newObject = {}; 
// Iterate over the array 
for(var i = 0; i < myArray.length; i++){ 
    // If the new object already contains the key (e.g. a, b, or c), increment value by one 
    if(myArray[i] in newObject){ 
     newObject[myArray[i]]++; 
    } else { 
     // Otherwise add a key (e.g. a, b, or c) to the object and assign 1 to it (first occurence) 
     newObject[myArray[i]] = 1; 
    } 
} 
// Write the resulting object to console 
window.console && console.log(newObject); 

newObject包含一列鍵(a,b,c)和值(每個鍵的出現次數)。你可以使用這些數據以任何你喜歡的格式輸出它,但這是作爲練習留給你的。

+0

@ jenson-button-event我被要求解釋該代碼,並且我這樣做了,因爲這是一個公平的請求。任何對JS有超過3天經驗的人(包括Felix Kling)都不需要任何解釋來理解這段代碼,因爲它非常清晰和簡潔。現在請停止拖釣。 – Jay

+0

Downvote和害羞添加評論? – Jay

+0

哦,有趣,我以爲你提到我是因爲我在我的收件箱中看到了這個評論(因爲我是唯一評論的人)。 FWIW,在你評論之前,我剛剛提出了你的回答;)在這裏給出的所有內容中,你提供了一個很好的解釋。 –

-1

試試這個

 var arr = new Array("malevolent", "pariah", "judicious", "pariah", "judicious"); 

    var new_arr1 = new Array(); // for containing distinct values like pariah 
    var new_arr2 = new Array(); // for containing distinct values count like 2 for pariah 

    // both will be on same index in new_arr1 and new_arr2 

    for(var i=0; i<arr.length; i++) 
    { 
      // fetch every value of arr 

     var indx = $.inArray(arr[i], new_arr1); // check value is exists in new_arr1 and get index 

     if(indx > -1) // values exists in new_arr1 
     { 
      var v = new_arr2[indx]+1; // increment the previous count +1 
      new_arr2[indx] = v; // update it on the index of new_arr2 
     } 
     else   
     { 
      // if value not in new_arr1 means the value comes first time 
      var l = new_arr1.length; 
      new_arr1[l] = arr[i]; // insert value in new_arr1 
      new_arr2[l] = 1;   // initate count 1 for the same index of new value in new_arr2 
     } 
    } 


// now new_arr1 will contains the distinct values 
// and new_arr2 contains the count for distinct values 
// eg new_arr1[0] = 'malevolent'; 
// new_arr2[0] = 1; 

// new_arr1[1] = 'pariah'; 
// new_arr2[1] = 2; 


// now you can fetch distinct values and their count like given below 
    for(var i=0; i<new_arr1.length; i++) 
    { 
     var str = new_arr1[i]+" X "+new_arr2[i]; 
     alert(str); 
    } 

FIDDLE

+2

爲什麼OP應該這樣做?請**解釋**您的解決方案,不要只發布代碼。它做什麼,它是如何工作的? –

+0

我正在更新答案 –

+0

@FelixKling現在查看我的更新答案和小提琴。你會發現這個代碼是如何工作的。 –

1

你可以嘗試以下方法:

var myArray = ["malevolent", "pariah", "judicious", "pariah", "judicious"]; 
var resultArray = []; 
var countArray = []; 

for(index in myArray) { 
    var element = myArray[index]; 
    var isInArray = resultArray.indexOf(element); 
    if(isInArray !== -1) { 
     var tmpCnt = countArray[isInArray]; 
     tmpCnt++; 
     countArray[isInArray] = tmpCnt; 
    } else { 
     resultArray.push(element); 
     countArray.push(1); 
    } 
} 
console.log(resultArray); 
console.log(countArray); 
+1

爲什麼OP應該這樣做?請**解釋**您的解決方案,不要只發布代碼。它做什麼,它是如何工作的? –

+0

@FelixKling,遍歷源數組中的每個元素,檢查目標數組中是否存在元素。如果該元素不存在於目標數組中,請將其添加到count數組中。並且如果元素存在,只是將count數組更新爲+1,是否清楚? – Dharmang

+0

請[編輯]你的答案並提供正確的解釋。 –

0

Felix Kling提供了一個鏈接到如何計算你的元素的答案。我只是無恥地使用那裏描述的reduce方法,然後迭代對象來構建一個字符串。

var a = ["malevolent", "pariah", "judicious", "pariah", "judicious"].reduce(function (acc, curr) { 
    if (typeof acc[curr] == 'undefined') { 
     acc[curr] = 1; 
    } else { 
     acc[curr] += 1; 
    } 

    return acc; 
}, {}); 

var out = ""; 

for (var k in a) { 
    out += k + " x " + a[k] + "; "; 
} 

console.log(out); 
相關問題