【问题标题】:How to find duplicate values in nested data like this如何在这样的嵌套数据中查找重复值
【发布时间】:2019-07-02 15:16:03
【问题描述】:

我需要一个函数来查找这种嵌套数据中的重复颜色

['黑色','白色','红色','黑色',['黑色','紫色','蓝色',['紫色','黄色','绿色','灰色'] , '紫色']]

预期结果:

(2) ["Purple", "Yellow"]

试过了:

var color=['Blue', 'Red', 'Purple', 'Grey', 'Purple', 'Yellow', 'Yellow']

var uniq = color
.map((name) => {
  return {count: 1, name: name}
})
.reduce((a, b) => {
  a[b.name] = (a[b.name] || 0) + b.count
  return a
}, {})

var duplicates = Object.keys(uniq).filter((a) => uniq[a] > 1)

console.log(duplicates)

【问题讨论】:

  • 请添加想要的结果和您尝试过的内容。

标签: javascript arrays duplicates find


【解决方案1】:

您可以将.flat.reduce 一起使用,并且仅当项目未出现在数组中的另一个索引处时才将其添加到累积的Set

const colors = ['black', 'white', 'red', 'black',[ 'black', 'purple', 'blue',[ 'purple', 'yellow', 'green', 'gray'], 'purple']],

[...duplicates] = colors
                   .flat(2)
                   .reduce((acc, col, i, src) => 
                     src.lastIndexOf(col) !== i 
                     ? acc.add(col) : acc, 
                   new Set);

console.log(duplicates);

【讨论】:

    【解决方案2】:

    我会首先将数组投影到特定项目出现的映射中,然后您可以查看该列表以确定重复项目(以及它出现的次数,如果需要)

    var arr = ['black', 'white', 'red', 'black', ['black', 'purple', 'blue', ['purple', 'yellow', 'green', 'gray'], 'purple']];
    
    var occurrences = arr.flat(2).reduce(function(prev, cur) {
      prev[cur] = (prev[cur] || 0) + 1;
      return prev;
    }, {});
    
    var duplicates = Object.keys(occurrences).filter(key => occurrences[key] > 1);
    

    【讨论】:

      【解决方案3】:

      程序将检查该值是否为数组,如果是数组,我们将递归处理内部数组,否则将值添加到Set object

      var colors = ['black', 'white', 'red', 'black', ['black', 'purple', 'blue', ['purple', 'yellow', 'green', 'gray'], 'purple']];
      
      function uniqueFunc(arr) {
          return arr.reduce(function (colorSet, value) {
              if (Array.isArray(value)) { uniqueFunc(value, colorSet); } else { colorSet.add(value) }
              return colorSet;
          }, arguments[1] ? arguments[1] : new Set());
      }
      
      console.log(Array.from(uniqueFunc(colors)));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-07
        • 1970-01-01
        • 2019-01-09
        • 2018-02-18
        • 2018-08-30
        • 2019-07-09
        • 2019-08-15
        • 2020-05-22
        相关资源
        最近更新 更多