網站搜尋

陣列 - 如何在 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)