【问题标题】:How to stop duplicate values in a loop?如何停止循环中的重复值?
【发布时间】:2017-11-01 02:55:39
【问题描述】:

我正在使用这段代码从每个带有“类别”键的对象中读取所有值:

const listChapter = datas.map((data) => console.log(data.category))

datas是一个Objects数组,共有45个对象。

问题是当我 console.log 时,我有很多重复值,你可以在下面看到:

console.log results

我希望每个类别都有一个唯一值。我怎样才能做到这一点?

【问题讨论】:

  • 数组中有很多重复值吗?如果是这样,您可能需要先过滤掉重复项...
  • listChapter 的格式究竟应该是什么?
  • 您可以map over data 将每个类别放入一个数组中,然后filter 该数组并删除所有重复值,假设您想要一个字符串数组。 Read this answer
  • lodash 或下划线具有制作独特元素 (_.uniq) 的功能。

标签: javascript arrays loops


【解决方案1】:

在遍历数据之前过滤重复数据。

var unique = datas.reduce(function(unique, data) {
  return unique.indexOf(data.category) === -1 ? unique.concat(data.category) : unique;
}, []);

【讨论】:

  • 它完成了这项工作。谢谢!
【解决方案2】:

这种方法更快,因为迭代次数更少:

const listChapter = Object.keys(datas.reduce((ac, el) => {
    ac[el.category] = true
    return ac
}, {}))

【讨论】:

    【解决方案3】:

    arr 是整个数组。

    for(var i = 0; i < data.length; i++) {
                if(arr[i] == data.category) {
                  remove item here;
                }
              }
    

    【讨论】:

      【解决方案4】:

      您也可以使用 Set 来解决问题:

      let data = ['Alfa', 'Alfa', 'Beta', 'Gamma', 'Beta', 'Omega', 'Psi', 'Beta', 'Omega'];
      
      let arr = [... new Set(data)];
      // Or   = Array.from(new Set(data));
      
      console.log(arr);
      

      编辑:我忘了你有对象数组。在这种情况下:

      let data2 = [
        {'category': 'Alfa'},
        {'category': 'Alfa'},
        {'category': 'Beta'}
      ]    
      
      let set = new Set();
      data2.forEach((data) => {
        set.add(data.category);
      });
      
      let arr2 = [... set];
      
      console.log(arr2);
      

      【讨论】:

        【解决方案5】:

        这是另一种使用 filter() 的单行代码(只是为了好玩):

        console.log(datas.filter((data, i, a) =>
                i === a.findIndex(data2 => data.category === data2.category)));
        

        【讨论】:

          【解决方案6】:

          这是Tomek's 答案的小改进。 (我还不能发表评论。)

          const arr = [
            {'category': 'Alfa'},
            {'category': 'Alfa'},
            {'category': 'Beta'}
          ]; 
          
          const unique = [...new Set(arr.map(item => item.category))];
          

          【讨论】:

            猜你喜欢
            • 2022-08-16
            • 1970-01-01
            • 2016-03-14
            • 2022-07-05
            • 2023-04-03
            • 1970-01-01
            • 2022-01-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多