使用 Set 实现

Set 是一组 key 的集合,但是不存 value,里面的值唯一
缺点:API 太新,旧浏览器不支持

  1. let array = [1,5,2,3,4,2,3,1,3,4];
  2. let set = new Set(array); // Set(5) {1, 5, 2, 3, 4}
  3. let set1 = new Set();
  4. array.forEach(x => set1.add(x));
  5. console.log(set1; // Set(5) {1, 5, 2, 3, 4})

不使用 Set 实现

方法1:

  1. unique = (array) => {
  2. let result = [];
  3. for(let i=0; i < array.length; i++){
  4. if(result.indexOf(array[i]) === -1) {
  5. result.push(array[i]);
  6. }
  7. }
  8. return result;
  9. }

方法2:使用计数排序的思想

  1. unique = (array) => {
  2. let hash = [];
  3. let result = [];
  4. for(let i=0;i<array.length; i++){
  5. hash[array[i]] = true;
  6. }
  7. for(let k in hash){
  8. result.push(k);
  9. }
  10. return result;
  11. }

使用 Map 实现

缺点:需要额外空间存数据,API 太新,旧浏览器不支持

  1. unique = (array) => {
  2. let hashMap = new Map();
  3. let result = [];
  4. for (let i = 0; i < array.length; i++) {
  5. if (!hashMap.has(array[i])) {
  6. hashMap.set(array[i],1);
  7. }
  8. }
  9. for (let key of hashMap.keys()) {
  10. result.push(key);
  11. }
  12. return result;
  13. }