【问题标题】:Array containing repeated values [duplicate]包含重复值的数组[重复]
【发布时间】:2021-07-21 09:02:52
【问题描述】:

我有这个数组包含三个相同字符串的多个值。但我只想要每个重复字符串中的一个值以及它们重复的次数。

例如,从下面的数组中,我希望输出为 { s:2,d:10,p:4 }

   ["s", "s", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "p", "p", "p", "p"]

我尝试过使用几个循环,但我不知道如何获得我想要的结果

【问题讨论】:

标签: javascript arrays loops


【解决方案1】:

这会迭代,检查“唯一项”对象是否具有正在解析的字符,如果找到则增加该属性,如果找不到则将此属性添加到对象中(使用 object.hasOwnProperty)。

按预期输出:{ d: 10, 磷:4, 年代:2 }

var myArr = ["s", "s", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "p", "p", "p", "p"];

const iterator = myArr.values();

var uniqueItems = {};

for (const value of iterator) {
  if (uniqueItems.hasOwnProperty(value)){
    uniqueItems[value] += 1;
  }else{
    uniqueItems[value] = 1;
  }
}
console.log(uniqueItems);

【讨论】:

    【解决方案2】:

    有点像这样:

    const arr = ["s", "s", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", 
    "p", "p", "p", "p"]
    
    const dict = {};
    arr.forEach((v) => {
        dict[v] = dict[v] === undefined ? 1 : dict[v]++;
    });
    

    【讨论】:

      【解决方案3】:

      你可以看看reduce()

      const data = [ "s", "s", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "p", "p", "p", "p", ];
      
      const o = data.reduce((a, b) => {
        a[b] ? (a[b] += 1) : (a[b] = 1);
        return a;
      }, {});
      
      console.log(o);

      【讨论】:

        【解决方案4】:

        我在这里使用非常简单的方法。两个循环检查相同数组的不同值是否相等,如果相等,则 count++ 然后我返回 obj[key] = value;

        这应该可行:

        function checkRepeated(arr) {
            let repeated = {};
            for(let i=0;i<arr.length;i++) {
                let value = arr[i];
                let count = 0;
                for(let j=0;j<arr.length;j++) {
                    if(i != j && value == arr[j]) {
                        count++;
                    }
                }
                repeated[value] = count+1;
            }
            return repeated;
        }
        

        【讨论】:

          【解决方案5】:

          您可以在回调中使用 reduce & 检查累加器对象是否包含键。如果不创建键,然后将其值增加 1

          let val = ["s","s",
          "d","d","d","d","d","d","d","d","d","d",
          "p","p","p","p"].reduce((acc, curr) => {
            acc.hasOwnProperty(curr) || (acc[curr] = 0);
            acc[curr] += 1;
            return acc;
          }, {});
          console.log(val);

          【讨论】:

            【解决方案6】:

            var strigArray = ["s", "s", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "p", "p", "p", "p"];
            var reapeat = strigArray.reduce(function(i, n) {
              i[n] = (i[n] || 0) + 1;
              return i;
            }, {});
            
            console.log(reapeat);

            请检查希望它会工作

            var strigArray = ["s", "s", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "p", "p", "p", "p"];
            var reapeat = strigArray.reduce(function(i, n) {
              i[n] = (i[n] || 0) + 1;
              return i;
            }, {});
            
            console.log(reapeat);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2022-01-21
              • 2018-04-23
              • 1970-01-01
              • 1970-01-01
              • 2011-11-04
              • 1970-01-01
              • 2012-06-14
              相关资源
              最近更新 更多