【问题标题】:How to access the count of duplicates in javascript/typescript如何访问 javascript/typescript 中的重复计数
【发布时间】:2019-05-05 16:33:10
【问题描述】:

我有一个数据数组 => this.allNodeSets。对于这个数组,我找到了重复项。现在我想找到重复的数量。找到重复计数的唯一方法是 say => 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 '{}'.

参考-

How to check if the elements in an array are repeated?

【问题讨论】:

  • 所以你有重复的arrays
  • 是的。我在 count 之前发现了重复项。我将把它包括在我的问题中
  • 消除重复数组不会像您现在尝试的那样工作,数组是通过地址引用的,因此两个包含相同元素的数组在比较相等性时会有所不同
  • 您要查找字符串的数量或子数组的数量,请澄清?
  • 我要查找子数组的个数

标签: javascript arrays angular typescript


【解决方案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)
          

    【讨论】:

      猜你喜欢
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2020-05-25
      • 2020-06-17
      相关资源
      最近更新 更多