代码之家  ›  专栏  ›  技术社区  ›  Vladimir Humeniuk

在多维数组中搜索字符串重复项

  •  0
  • Vladimir Humeniuk  · 技术社区  · 7 年前

    我有带字符串的多维数组:

    const arr = [['a', 'b'], ['c', 'd'], ['d', 'a']]
    

    如何将所有嵌套数组中出现的所有值都记录到控制台1次以上?(对于此示例,函数应为console.log“a”和“d”)。

    谢谢你的帮助

    5 回复  |  直到 7 年前
        1
  •  3
  •   dporechny    7 年前

    &13;
    &13;
    let findDupesInMDArray = (arr) => {
      // flatten the array
      const flat = arr.flat();
      // filter for dupes
      return flat.filter((item, index) => flat.indexOf(item) != index)
    }
    
    let array = [['a', 'b'], ['c', 'd'], ['d', 'a']]
    const dupes = findDupesInMDArray(array)
    console.log(dupes)
    和13;
    >13;
    >13;
        2
  •  4
  •   Maheer Ali    7 年前

    首先将arr放平,然后使用 Set 然后循环,然后比较 lastIndexOf indexOf

    &13;
    &13;
    const arr = [['a', 'b'], ['c', 'd'], ['d', 'a']]
    let flat = arr.toString().split(',');
    [... new Set(flat)].forEach(a => {
      if(flat.indexOf(a) !== flat.lastIndexOf(a)) console.log(a)
    })
    和13;
    >13;
    >13;
        3
  •  1
  •   kockburn    7 年前

    使用排列语法,array flat,array reduce,array filter and array map.

    &13;
    &13;
    const arr = [['a', 'b'], ['c', 'd'], ['d', 'a']]
    
    const res = Array.from(arr.flat().reduce((a,c)=>{
      return a.set(c, (a.get(c)||0) + 1);
    }, new Map()))
    .filter(([,c])=> c > 1)
    .map(([k])=>k);
    
    console.log(res);
    和13;
    >13;
    >13;
        4
  •  0
  •   Nina Scholz    7 年前

    您可以使用 Map 仅获取计数大于1的项目。

    &13;
    &13;
    const 
        count = (m, a) => Array.isArray(a) ? a.reduce(count, m) : m.set(a, (m.get(a) || 0) + 1);
    
    var array = [['a', 'b'], ['c', 'd'], ['d', 'a']],
        result = Array
            .from(array.reduce(count, new Map), ([k, v]) => v > 1 && k)
            .filter(Boolean)
        
    console.log(result);
    和13;
    >13;
    >13;
        5
  •  0
  •   samplecode3300    7 年前

    下面是一个更基本的方法:

    var array = [['a', 'b'], ['c', 'd'], ['d', 'a']]
      var result = [];
      for (var i in array){
       for (var l in array[i]){
        if(array[i][l]==='a'||array[i][l]==='d')
          result.push(array[i][l])
    }}
    
    var unique = new Set(result) //creates a set with unique values
    console.log(unique) //should log the set {'a','d'}
    

    我们要做的是

    1. 在嵌套数组中循环两次
    2. 将元素(如果元素=='a'或元素=='d')推送到名为result的新数组中。
    3. 创建仅具有唯一值的新集合