zoukankan      html  css  js  c++  java
  • js扩展方法(数组不重复推入)

    扩展方法是一个很有趣的东西。

    使用prototype在原始的类型上添加自己需要的方法。方便在一些常用的情况下使用,比如说字符串的String.trim()清除字符串前后的空格(当然这个方法内置已经有了)

    举个数组的例子。

    Array.push()  -- 推入一个数据。

    假如我希望推入的数据不重复呢。要么在调用的时候进行数据遍历是否重复再推入,但这样略显麻烦以及重复。

     1 Array.prototype.pushWithoutDuplicate = function () {
     2   for (let i = 0; i < arguments.length; i++) {
     3     const arg = arguments[i]
     4     // this表示调用的数组
     5     if (this.indexOf(arg) === -1) {
     6       this.push(arg)
     7     }
     8   }
     9 }
    10 
    11 // 这样的话
    12 let a = [1, 2, 3]
    13 a.pushWithoutDuplicate(4)   //成功 a = [1, 2, 3, 4]
    14 a.pushWithoutDuplicate(3)  // 无反应

    这样好像感觉有点蠢,毕竟我肯定知道3是重复的。

    但实际情况,比如我开发一个随机抽奖,但实际上,奖项可能不能被同一个人拿到(踩狗屎运那种),所以这种情况往往很有用

     1 const peoples = ['老王', '小白', '凑热闹的']
     2 const prizeNum = 2
     3 let prizeResult = []
     4 
     5 function randomResult () {
     6   // 当获奖者小于2
     7   while (prizeResult.length < prizeNum) {
     8     // 随机产生一个获奖者
     9     prizeResult.push(peoples[Math.floor(Math.random() * 2)])
    10     // 收不定老王很幸运,全包了,那怎办
    11   }
    12 }
    13 
    14 
    15 // 这种情况就不会发生了
    16 function randomResultTwo () {
    17   // 当获奖者小于2
    18   while (prizeResult.length < prizeNum) {
    19     // 随机产生一个获奖者
    20     prizeResult.pushWithoutDuplicate(peoples[Math.floor(Math.random() * 2)])
    21   }
    22 }

    ES6中Set的数据结构,也可以达到上述的效果。

    Set类似于数据,但是成员的值都是唯一的。

    1 const s = new Set();
    2 
    3 [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
    4 
    5 for (let i of s) {
    6   console.log(i);
    7 }
    8 // 2 3 5 4

    或者直接

    array = [...new Set(array)]
    // 一步到位
    以梦为马
  • 相关阅读:
    BZOJ 4408: [Fjoi 2016]神秘数
    51Nod 1317 相似字符串对
    51Nod 1561 另一种括号序列
    BZOJ 4556: [Tjoi2016&Heoi2016]字符串
    51Nod 1048 整数分解为2的幂 V2
    BZOJ 4698: Sdoi2008 Sandy的卡片
    BZOJ 3571: [Hnoi2014]画框
    BZOJ 2752: [HAOI2012]高速公路(road)
    BZOJ 1095: [ZJOI2007]Hide 捉迷藏
    BZOJ 4537: [Hnoi2016]最小公倍数
  • 原文地址:https://www.cnblogs.com/lsAxy/p/12753410.html
Copyright © 2011-2022 走看看