陣列 - 如何在 javascript/typescript 中存取重複項的數量
我有一個數據陣列 => this.allNodeSets。對這個陣列,我找出重複項。現在我想要找出重複項的數量。找到重複數量的唯一方法是說 => itemCount.ball
假代碼 -
var randomArray = ["ball", "ball", "tree", "ball", "tree", "bus", "car"];
var itemCount = {};
randomArray.forEach(function(value){
if(value in itemCount) itemCount[value] = itemCount[value] + 1;
else itemCount[value] = 1;
});
要找到計數 - 做 =>
itemCount.ball
我在像上面那樣找到這個個體數量時遇到困難。我的程式碼 -
app.component.ts - Angular2+
callFunctionSingleSelectedResult(){
allNodeSets = [
["claimIntimationRequestBody", "claimIntimationRequestHeader"],
["claimIntimationRequestBody", "claimIntimationRequestHeader"],
["claimIntimationRequestBody", "claimIntimationRequestBody"],
["claimIntimationRequestBody", "claimIntimationRequestHeader"],
["claimIntimationRequestBody", "claimIntimationResponseBody"],
["claimIntimationRequestHeader", "claimIntimationRequestBody"],
["claimIntimationRequestHeader", "claimIntimationRequestHeader"],
["claimIntimationRequestHeader", "claimIntimationResponseBody"],
["claimIntimationRequestBody", "claimIntimationRequestHeader"],
["claimIntimationRequestBody", "claimIntimationResponseBody"],
["claimIntimationRequestHeader", "claimIntimationResponseBody"],
]
var duplicateResult = this.findDuplicates(this.allNodeSets);
console.log("inside duplicates, result= ", duplicateResult);
//------------[1] count duplicates
var itemCount = {};
duplicateResult.forEach(function (value) {
if (value in itemCount)
itemCount[value] = itemCount[value] + 1;
else itemCount[value] = 1;
});
console.log("duplicateResult, forEach = count = ",
itemCount)
for (var i = 0; i < duplicateResult.length; i++) {
console.log(" individual count = ", itemCount)
}
}
// finding Duplicates
findDuplicates(arr) {
var len = arr.length,
out = [],
counts = {};
for (var i = 0; i < len; i++) {
var item = arr[i];
counts[item] = counts[item] >= 1 ? counts[item] + 1 : 1;
if (counts[item] > 1) {
out.push(item);
}
}
return out;
}
// Function duplicate ends
輸出 -
duplicateResult =
[
["claimIntimationRequestBody","claimIntimationRequestHeader"],
["claimIntimationRequestBody", "claimIntimationRequestHeader"],
["claimIntimationRequestBody","claimIntimationRequestHeader"] ,
["claimIntimationRequestBody","claimIntimationResponseBody"],
["claimIntimationRequestHeader", "claimIntimationResponseBody"] ,
["claimIntimationRequestHeader" "claimIntimationResponseBody"]
]
duplicate count, counter = {["claimIntimationRequestBody","claimIntimationRequestHeader"]: 3,
["claimIntimationRequestBody","claimIntimationRequestBody"]: 1,
["claimIntimationRequestBody","claimIntimationResponseBody"]: 1}
我搜索了整個網絡,但沒有其他可行的方法讓我能以其他方式來確定某個代碼獲取計數。請幫助確定一種方法來獲取節點數,或者也許在這裡有方法可以獲取節點數。我無法做到。
如果我這樣做 -
for (var i = 0; i < duplicateResult.length; i++) {
console.log(" individual count = ", itemCount.duplicateResult)
}
我收到錯誤 -
Property 'duplicateResult' does not exist on type '{}'.
參考 -
如何檢查陣列中的元素是否有重複?
答案#1
var randomArray = ["ball", "ball", "tree", "ball", "tree", "bus", "car"];
var counts = {};
randomArray.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });
console.log(counts)這是一個工作示例,我希望這會有幫助
答案#2
var input= [
["claimIntimationRequestBody","claimIntimationRequestHeader"],
["claimIntimationRequestBody", "claimIntimationRequestHeader"],
["claimIntimationRequestBody","claimIntimationRequestHeader"] ,
["claimIntimationRequestBody","claimIntimationResponseBody"],
["claimIntimationRequestHeader", "claimIntimationResponseBody"] ,
["claimIntimationRequestHeader", "claimIntimationResponseBody"]
];
var output = {};
input.forEach(item => {
// key is combination of all values of subarray
let key = item.join("_");
if(!output[key]) output[key] = 0;
output[key] +=1;
}
)
console.log(output)
