我試圖顯示在一個更可讀的方式的陣列的內容,這是陣列:顯示號碼,如果在JavaScript陣列的每個項目
["malevolent", "pariah", "judicious", "pariah", "judicious"]
我簡單地添加該數組到HTML元素顯示它,但我想這樣顯示:
malevolent, pariah x 2, judicious x2
我該怎麼做?
我試圖顯示在一個更可讀的方式的陣列的內容,這是陣列:顯示號碼,如果在JavaScript陣列的每個項目
["malevolent", "pariah", "judicious", "pariah", "judicious"]
我簡單地添加該數組到HTML元素顯示它,但我想這樣顯示:
malevolent, pariah x 2, judicious x2
我該怎麼做?
這是很簡單的實際上是:
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)和值(每個鍵的出現次數)。你可以使用這些數據以任何你喜歡的格式輸出它,但這是作爲練習留給你的。
試試這個
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);
}
爲什麼OP應該這樣做?請**解釋**您的解決方案,不要只發布代碼。它做什麼,它是如何工作的? –
我正在更新答案 –
@FelixKling現在查看我的更新答案和小提琴。你會發現這個代碼是如何工作的。 –
你可以嘗試以下方法:
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);
爲什麼OP應該這樣做?請**解釋**您的解決方案,不要只發布代碼。它做什麼,它是如何工作的? –
@FelixKling,遍歷源數組中的每個元素,檢查目標數組中是否存在元素。如果該元素不存在於目標數組中,請將其添加到count數組中。並且如果元素存在,只是將count數組更新爲+1,是否清楚? – Dharmang
請[編輯]你的答案並提供正確的解釋。 –
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);
什麼是'x 2'? –
這意味着pariah是數組中的兩倍 –
只需計算數組中的元素:http://stackoverflow.com/q/5667888/218196。我假設你知道如何進行字符串連接並更改HTML元素的內容。 –