arrayer - Hur man får tillgång till antalet dubbletter i javascript/typescript


Jag har en array med data => this.allNodeSets. I denna array hittar jag duplicerade värden. Och nu vill jag hitta antalet duplicerade värden. Det enda sättet att hitta antalet duplicerade är att säga => itemCount.ball

Dummy-kod -

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;
}); 

För att hitta antalet - gör =>

 itemCount.ball 

Jag har svårt att hitta denna individuella räkning som gjorts ovan. Min kod -

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

Utdata -

 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}

Jag har sökt igenom hela webben men det finns inget annat fungerande sätt där jag kan bestämma en kod som ger räkningen på något annat sätt. Snälla hjälp till med att hitta ett sätt att hämta nodräkningen eller kanske finns det här ett sätt att hämta nodräkningen. Jag kan inte göra det.

Om jag gör detta -

 for (var i = 0; i < duplicateResult.length; i++) {

                console.log(" individual count = ", itemCount.duplicateResult)
              }

Jag får fel -

Property 'duplicateResult' does not exist on type '{}'.

Referens -

Hur kontrollerar man om elementen i en array upprepas?

Svar #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)

detta är ett fungerande exempel, jag hoppas att detta hjälper

Svar #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)