How to get unique values in an array

后端 未结 20 1971
情歌与酒
情歌与酒 2020-11-22 14:02

How can I get a list of unique values in an array? Do I always have to use a second array or is there something similar to java\'s hashmap in JavaScript?

I am going

20条回答
  •  情歌与酒
    2020-11-22 14:56

    Fast, compact, no nested loops, works with any object not just strings and numbers, takes a predicate, and only 5 lines of code!!

    function findUnique(arr, predicate) {
      var found = {};
      arr.forEach(d => {
        found[predicate(d)] = d;
      });
      return Object.keys(found).map(key => found[key]); 
    }
    

    Example: To find unique items by type:

    var things = [
      { name: 'charm', type: 'quark'},
      { name: 'strange', type: 'quark'},
      { name: 'proton', type: 'boson'},
    ];
    
    var result = findUnique(things, d => d.type);
    //  [
    //    { name: 'charm', type: 'quark'},
    //    { name: 'proton', type: 'boson'}
    //  ] 
    

    If you want it to find the first unique item instead of the last add a found.hasOwnPropery() check in there.

提交回复
热议问题